@voxgig/sdkgen 4.20.0 → 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 (966) 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/tsconfig.tsbuildinfo +1 -1
  9. package/model/sdkgen.aon +49 -3
  10. package/package.json +1 -1
  11. package/project/.sdk/model/feature/secrets.aon +128 -0
  12. package/project/.sdk/model/feature/validate.aon +3 -2
  13. package/project/.sdk/model/target/c.aon +1 -1
  14. package/project/.sdk/model/target/clojure.aon +1 -1
  15. package/project/.sdk/model/target/cpp.aon +1 -1
  16. package/project/.sdk/model/target/csharp.aon +1 -1
  17. package/project/.sdk/model/target/elixir.aon +1 -1
  18. package/project/.sdk/model/target/go.aon +1 -1
  19. package/project/.sdk/model/target/java.aon +1 -1
  20. package/project/.sdk/model/target/kotlin.aon +1 -1
  21. package/project/.sdk/model/target/lua.aon +1 -1
  22. package/project/.sdk/model/target/ocaml.aon +1 -1
  23. package/project/.sdk/model/target/perl.aon +1 -1
  24. package/project/.sdk/model/target/php.aon +1 -1
  25. package/project/.sdk/model/target/py.aon +1 -1
  26. package/project/.sdk/model/target/rb.aon +1 -1
  27. package/project/.sdk/model/target/rust.aon +1 -1
  28. package/project/.sdk/model/target/scala.aon +1 -1
  29. package/project/.sdk/model/target/swift.aon +1 -1
  30. package/project/.sdk/model/target/zig.aon +1 -1
  31. package/project/.sdk/src/cmp/c/Main_c.ts +3 -0
  32. package/project/.sdk/src/cmp/c/Schema_c.ts +106 -0
  33. package/project/.sdk/src/cmp/clojure/Main_clojure.ts +2 -0
  34. package/project/.sdk/src/cmp/clojure/ReadmeExplanation_clojure.ts +1 -0
  35. package/project/.sdk/src/cmp/clojure/Schema_clojure.ts +73 -0
  36. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +3 -0
  37. package/project/.sdk/src/cmp/cpp/Schema_cpp.ts +105 -0
  38. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +3 -0
  39. package/project/.sdk/src/cmp/csharp/Schema_csharp.ts +85 -0
  40. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +2 -0
  41. package/project/.sdk/src/cmp/elixir/ReadmeExplanation_elixir.ts +1 -0
  42. package/project/.sdk/src/cmp/elixir/Schema_elixir.ts +88 -0
  43. package/project/.sdk/src/cmp/go/Main_go.ts +2 -0
  44. package/project/.sdk/src/cmp/go/Schema_go.ts +93 -0
  45. package/project/.sdk/src/cmp/java/Main_java.ts +2 -0
  46. package/project/.sdk/src/cmp/java/Schema_java.ts +125 -0
  47. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +2 -0
  48. package/project/.sdk/src/cmp/kotlin/Schema_kotlin.ts +111 -0
  49. package/project/.sdk/src/cmp/lua/Main_lua.ts +46 -9
  50. package/project/.sdk/src/cmp/lua/Package_lua.ts +1 -0
  51. package/project/.sdk/src/cmp/lua/ReadmeExplanation_lua.ts +1 -0
  52. package/project/.sdk/src/cmp/lua/Schema_lua.ts +72 -0
  53. package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +24 -1
  54. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +34 -13
  55. package/project/.sdk/src/cmp/ocaml/ReadmeExplanation_ocaml.ts +1 -0
  56. package/project/.sdk/src/cmp/ocaml/Schema_ocaml.ts +99 -0
  57. package/project/.sdk/src/cmp/perl/Main_perl.ts +2 -0
  58. package/project/.sdk/src/cmp/perl/ReadmeExplanation_perl.ts +1 -0
  59. package/project/.sdk/src/cmp/perl/Schema_perl.ts +107 -0
  60. package/project/.sdk/src/cmp/php/Main_php.ts +2 -0
  61. package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
  62. package/project/.sdk/src/cmp/php/ReadmeExplanation_php.ts +1 -0
  63. package/project/.sdk/src/cmp/php/Schema_php.ts +129 -0
  64. package/project/.sdk/src/cmp/py/Main_py.ts +2 -0
  65. package/project/.sdk/src/cmp/py/ReadmeExplanation_py.ts +1 -0
  66. package/project/.sdk/src/cmp/py/Schema_py.ts +72 -0
  67. package/project/.sdk/src/cmp/rb/Main_rb.ts +2 -0
  68. package/project/.sdk/src/cmp/rb/ReadmeExplanation_rb.ts +1 -0
  69. package/project/.sdk/src/cmp/rb/Schema_rb.ts +70 -0
  70. package/project/.sdk/src/cmp/rust/Main_rust.ts +3 -0
  71. package/project/.sdk/src/cmp/rust/Schema_rust.ts +107 -0
  72. package/project/.sdk/src/cmp/scala/Main_scala.ts +3 -0
  73. package/project/.sdk/src/cmp/scala/Schema_scala.ts +108 -0
  74. package/project/.sdk/src/cmp/swift/Main_swift.ts +3 -0
  75. package/project/.sdk/src/cmp/swift/Schema_swift.ts +92 -0
  76. package/project/.sdk/src/cmp/zig/Main_zig.ts +3 -0
  77. package/project/.sdk/src/cmp/zig/Schema_zig.ts +114 -0
  78. package/project/.sdk/tm/c/core/context.c +3 -0
  79. package/project/.sdk/tm/c/core/sdk.h +14 -0
  80. package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +2 -2
  81. package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +2 -2
  82. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +2 -2
  83. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +2 -2
  84. package/project/.sdk/tm/c/feature/secrets/plugin/config.c +2 -2
  85. package/project/.sdk/tm/c/feature/secrets/plugin/config.h +2 -2
  86. package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +2 -2
  87. package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +2 -2
  88. package/project/.sdk/tm/c/feature/secrets/plugin/env.c +2 -2
  89. package/project/.sdk/tm/c/feature/secrets/plugin/env.h +2 -2
  90. package/project/.sdk/tm/c/feature/secrets/plugin/export.c +3 -3
  91. package/project/.sdk/tm/c/feature/secrets/plugin/export.h +2 -2
  92. package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +2 -2
  93. package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +2 -2
  94. package/project/.sdk/tm/c/feature/secrets/plugin/host.c +25 -2
  95. package/project/.sdk/tm/c/feature/secrets/plugin/host.h +3 -2
  96. package/project/.sdk/tm/c/feature/secrets/plugin/order.c +2 -2
  97. package/project/.sdk/tm/c/feature/secrets/plugin/order.h +2 -2
  98. package/project/.sdk/tm/c/feature/secrets/plugin/point.c +2 -2
  99. package/project/.sdk/tm/c/feature/secrets/plugin/point.h +2 -2
  100. package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +2 -2
  101. package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +2 -2
  102. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +2 -2
  103. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +2 -2
  104. package/project/.sdk/tm/c/feature/secrets/plugin/types.c +2 -2
  105. package/project/.sdk/tm/c/feature/secrets/plugin/types.h +2 -2
  106. package/project/.sdk/tm/c/feature/secrets/plugin/value.c +2 -2
  107. package/project/.sdk/tm/c/feature/secrets/plugin/value.h +2 -2
  108. package/project/.sdk/tm/c/feature/secrets/plugin/version.c +2 -2
  109. package/project/.sdk/tm/c/feature/secrets/plugin/version.h +2 -2
  110. package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +2 -2
  111. package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +2 -2
  112. package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +2 -2
  113. package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +2 -2
  114. package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +2 -2
  115. package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +2 -2
  116. package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +2 -2
  117. package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +2 -2
  118. package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +2 -2
  119. package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +2 -2
  120. package/project/.sdk/tm/c/feature/secrets/plugins/minivault.c +2072 -0
  121. package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +2 -2
  122. package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +2 -2
  123. package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +2 -2
  124. package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +151 -10
  125. package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +16 -10
  126. package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +2 -2
  127. package/project/.sdk/tm/c/feature/secrets/plugins/support.h +12 -8
  128. package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +2 -2
  129. package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +17 -2
  130. package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +5 -5
  131. package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +37 -9
  132. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +2 -2
  133. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +17 -2
  134. package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +16 -2
  135. package/project/.sdk/tm/c/feature/validate.c +364 -0
  136. package/project/.sdk/tm/c/feature/validate.h +29 -0
  137. package/project/.sdk/tm/c/src/feature/validate/.gitkeep +0 -0
  138. package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
  139. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
  140. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
  141. package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
  142. package/project/.sdk/tm/c/utility/make_options.c +12 -24
  143. package/project/.sdk/tm/c/utility/make_spec.c +8 -0
  144. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +2 -2
  145. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +2 -2
  146. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +2 -2
  147. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +2 -2
  148. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +2 -2
  149. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +3 -3
  150. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +2 -2
  151. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +17 -2
  152. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +2 -2
  153. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +2 -2
  154. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +2 -2
  155. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +2 -2
  156. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +2 -2
  157. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +2 -2
  158. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +2 -2
  159. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +2 -2
  160. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +2 -2
  161. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +2 -2
  162. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +2 -2
  163. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +2 -2
  164. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +2 -2
  165. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +2 -2
  166. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +2 -2
  167. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +2 -2
  168. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +2 -2
  169. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +2 -2
  170. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +2 -2
  171. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +2 -2
  172. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/minivault.clj +837 -0
  173. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +2 -2
  174. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +2 -2
  175. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +2 -2
  176. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +2 -2
  177. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +2 -2
  178. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +6 -4
  179. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +2 -2
  180. package/project/.sdk/tm/clojure/src/feature/validate/.gitkeep +0 -0
  181. package/project/.sdk/tm/clojure/src/sdk/core.clj +31 -41
  182. package/project/.sdk/tm/clojure/src/sdk/features.clj +202 -0
  183. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
  184. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
  185. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
  186. package/project/.sdk/tm/cpp/core/types.hpp +4 -0
  187. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +2 -2
  188. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +2 -2
  189. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +2 -2
  190. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +2 -2
  191. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +2 -2
  192. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +2 -2
  193. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +2 -2
  194. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +2 -2
  195. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +2 -2
  196. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +2 -2
  197. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +3 -3
  198. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +2 -2
  199. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +2 -2
  200. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +2 -2
  201. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +21 -2
  202. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +3 -2
  203. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +2 -2
  204. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +2 -2
  205. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +2 -2
  206. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +2 -2
  207. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +2 -2
  208. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +2 -2
  209. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +2 -2
  210. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +2 -2
  211. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +2 -2
  212. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +2 -2
  213. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +2 -2
  214. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +2 -2
  215. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +2 -2
  216. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +2 -2
  217. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +2 -2
  218. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +2 -2
  219. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +2 -2
  220. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +2 -2
  221. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +2 -2
  222. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +2 -2
  223. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +2 -2
  224. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +9 -7
  225. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +2 -2
  226. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +2 -2
  227. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +2 -2
  228. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +2 -2
  229. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +2 -2
  230. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +2 -2
  231. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +2 -2
  232. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +2 -2
  233. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +2 -2
  234. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +2 -2
  235. package/project/.sdk/tm/cpp/feature/secrets/plugins/Minivault.cpp +1345 -0
  236. package/project/.sdk/tm/cpp/feature/secrets/plugins/Minivault.hpp +219 -0
  237. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +2 -2
  238. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +2 -2
  239. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +2 -2
  240. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +2 -2
  241. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +2 -2
  242. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +2 -2
  243. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +2 -2
  244. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +2 -2
  245. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +2 -2
  246. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +2 -2
  247. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +2 -2
  248. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +2 -2
  249. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +22 -2
  250. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +12 -2
  251. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +3 -3
  252. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +2 -2
  253. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +2 -2
  254. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +2 -2
  255. package/project/.sdk/tm/cpp/feature/validate.hpp +301 -0
  256. package/project/.sdk/tm/cpp/src/feature/validate/.gitkeep +0 -0
  257. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
  258. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
  259. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
  260. package/project/.sdk/tm/cpp/utility/pipeline.hpp +24 -41
  261. package/project/.sdk/tm/csharp/feature/ValidateFeature.cs +343 -0
  262. package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +2 -2
  263. package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +2 -2
  264. package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +2 -2
  265. package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +2 -2
  266. package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +2 -2
  267. package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +2 -2
  268. package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +2 -2
  269. package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +3 -3
  270. package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +2 -2
  271. package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +9 -2
  272. package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +21 -2
  273. package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +2 -2
  274. package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +2 -2
  275. package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +2 -2
  276. package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +2 -2
  277. package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +2 -2
  278. package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +2 -2
  279. package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +2 -2
  280. package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +2 -2
  281. package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +2 -2
  282. package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +2 -2
  283. package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +2 -2
  284. package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +2 -2
  285. package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +2 -2
  286. package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +2 -2
  287. package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +2 -2
  288. package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +2 -2
  289. package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +2 -2
  290. package/project/.sdk/tm/csharp/feature/secrets/plugins/MiniVault.cs +1572 -0
  291. package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +2 -2
  292. package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +2 -2
  293. package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +2 -2
  294. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +2 -2
  295. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +3 -2
  296. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +2 -2
  297. package/project/.sdk/tm/csharp/src/feature/validate/.gitkeep +0 -0
  298. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
  299. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
  300. package/project/.sdk/tm/csharp/utility/MakeOptions.cs +12 -85
  301. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +24 -3
  302. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +2 -2
  303. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +2 -2
  304. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +2 -2
  305. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +2 -2
  306. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +2 -2
  307. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +2 -2
  308. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +7 -4
  309. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +2 -2
  310. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +13 -2
  311. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +15 -2
  312. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +2 -2
  313. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +2 -2
  314. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +2 -2
  315. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +2 -2
  316. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +2 -2
  317. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +2 -2
  318. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +2 -2
  319. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +2 -2
  320. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +2 -2
  321. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +2 -2
  322. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +2 -2
  323. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +2 -2
  324. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +2 -2
  325. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +2 -2
  326. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +2 -2
  327. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +3 -3
  328. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +3 -3
  329. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +2 -2
  330. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/minivault.ex +1033 -0
  331. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +2 -2
  332. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +2 -2
  333. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +2 -2
  334. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +2 -2
  335. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +2 -2
  336. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +17 -5
  337. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +2 -2
  338. package/project/.sdk/tm/elixir/lib/projectname/feature/validate.ex +320 -0
  339. package/project/.sdk/tm/elixir/lib/projectname/utility.ex +10 -46
  340. package/project/.sdk/tm/elixir/src/feature/validate/.gitkeep +0 -0
  341. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
  342. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
  343. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
  344. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  345. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  346. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  347. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  348. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  349. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +2 -2
  350. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  351. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +25 -1
  352. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  353. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  354. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  355. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  356. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  357. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  358. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  359. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +2 -2
  360. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
  361. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
  362. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
  363. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
  364. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
  365. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +2 -2
  366. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +2 -2
  367. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +2 -2
  368. package/project/.sdk/tm/go/feature/secrets/plugins/minivault/format.go +493 -0
  369. package/project/.sdk/tm/go/feature/secrets/plugins/minivault/minivault.go +1131 -0
  370. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
  371. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
  372. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
  373. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +14 -2
  374. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +2 -2
  375. package/project/.sdk/tm/go/feature/validate_feature.go +346 -0
  376. package/project/.sdk/tm/go/src/feature/validate/.gitkeep +0 -0
  377. package/project/.sdk/tm/go/test/omni/omni.go +2 -2
  378. package/project/.sdk/tm/go/test/omni/util.go +2 -2
  379. package/project/.sdk/tm/go/utility/make_options.go +13 -54
  380. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +24 -8
  381. package/project/.sdk/tm/java/feature/ValidateFeature.java +330 -0
  382. package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +2 -2
  383. package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +2 -2
  384. package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +2 -2
  385. package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +2 -2
  386. package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +2 -2
  387. package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +2 -2
  388. package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +2 -2
  389. package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +3 -3
  390. package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +2 -2
  391. package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +3 -3
  392. package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +21 -2
  393. package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +2 -2
  394. package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +2 -2
  395. package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +2 -2
  396. package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +2 -2
  397. package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +2 -2
  398. package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +2 -2
  399. package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +2 -2
  400. package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +2 -2
  401. package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +2 -2
  402. package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +2 -2
  403. package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +4 -3
  404. package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +2 -2
  405. package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +2 -2
  406. package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +2 -2
  407. package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +2 -2
  408. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +2 -2
  409. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +2 -2
  410. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +2 -2
  411. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +2 -2
  412. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +2 -2
  413. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +2 -2
  414. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +2 -2
  415. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +2 -2
  416. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Minivault.java +1448 -0
  417. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +2 -2
  418. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +2 -2
  419. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +2 -2
  420. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +2 -2
  421. package/project/.sdk/tm/java/src/feature/validate/.gitkeep +0 -0
  422. package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
  423. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
  424. package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
  425. package/project/.sdk/tm/java/utility/MakeOptions.java +13 -45
  426. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  427. package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +2 -2
  428. package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +2 -2
  429. package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +2 -2
  430. package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +2 -2
  431. package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +2 -2
  432. package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +3 -3
  433. package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +2 -2
  434. package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +17 -2
  435. package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +2 -2
  436. package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +2 -2
  437. package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +2 -2
  438. package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +2 -2
  439. package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +2 -2
  440. package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +2 -2
  441. package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +2 -2
  442. package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +2 -2
  443. package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +2 -2
  444. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +2 -2
  445. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +2 -2
  446. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +2 -2
  447. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +2 -2
  448. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +2 -2
  449. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +2 -2
  450. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +2 -2
  451. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +2 -2
  452. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/minivault.js +866 -0
  453. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +2 -2
  454. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +2 -2
  455. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +2 -2
  456. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +2 -2
  457. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +3 -2
  458. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +2 -2
  459. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +2 -2
  460. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +2 -2
  461. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +2 -2
  462. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +2 -2
  463. package/project/.sdk/tm/js/src/utility/StructUtility.js +1 -1
  464. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  465. package/project/.sdk/tm/js/test/vendor/omni/runner.js +1 -1
  466. package/project/.sdk/tm/js/test/vendor/omni/util.js +1 -1
  467. package/project/.sdk/tm/kotlin/feature/ValidateFeature.kt +297 -0
  468. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +2 -2
  469. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +2 -2
  470. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +2 -2
  471. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +2 -2
  472. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +2 -2
  473. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +3 -3
  474. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +2 -2
  475. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +21 -2
  476. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +2 -2
  477. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +2 -2
  478. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +2 -2
  479. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +2 -2
  480. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +2 -2
  481. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +2 -2
  482. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +2 -2
  483. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +2 -2
  484. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +2 -2
  485. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +2 -2
  486. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +3 -2
  487. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +2 -2
  488. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +14 -2
  489. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +10 -2
  490. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +2 -2
  491. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +2 -2
  492. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +2 -2
  493. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +2 -2
  494. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +2 -2
  495. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +2 -2
  496. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +2 -2
  497. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +2 -2
  498. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Minivault.kt +1095 -0
  499. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +2 -2
  500. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +2 -2
  501. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +2 -2
  502. package/project/.sdk/tm/kotlin/src/feature/validate/.gitkeep +0 -0
  503. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
  504. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
  505. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
  506. package/project/.sdk/tm/kotlin/utility/MakeOptions.kt +13 -35
  507. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -0
  508. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  509. package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +2 -2
  510. package/project/.sdk/tm/lua/feature/secrets/native/sekretovault.c +240 -0
  511. package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +2 -2
  512. package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +2 -2
  513. package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +2 -2
  514. package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +2 -2
  515. package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +2 -2
  516. package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +12 -3
  517. package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +2 -2
  518. package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +18 -2
  519. package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +2 -2
  520. package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +2 -2
  521. package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +2 -2
  522. package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +2 -2
  523. package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +2 -2
  524. package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +2 -2
  525. package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +2 -2
  526. package/project/.sdk/tm/lua/feature/secrets/plugin.lua +2 -2
  527. package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +2 -2
  528. package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +2 -2
  529. package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +2 -2
  530. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +2 -2
  531. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +2 -2
  532. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +2 -2
  533. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +2 -2
  534. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +2 -2
  535. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +2 -2
  536. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +2 -2
  537. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +2 -2
  538. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +2 -2
  539. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +2 -2
  540. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/minivault.lua +1227 -0
  541. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +2 -2
  542. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +2 -2
  543. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +2 -2
  544. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +2 -2
  545. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +2 -2
  546. package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +3 -2
  547. package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +2 -2
  548. package/project/.sdk/tm/lua/feature/validate_feature.lua +333 -0
  549. package/project/.sdk/tm/lua/src/feature/validate/.gitkeep +0 -0
  550. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
  551. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
  552. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
  553. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
  554. package/project/.sdk/tm/lua/utility/make_options.lua +74 -55
  555. package/project/.sdk/tm/lua/utility/make_spec.lua +8 -1
  556. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  557. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  558. package/project/.sdk/tm/ocaml/Makefile +12 -7
  559. package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +2 -2
  560. package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +2 -2
  561. package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +2 -2
  562. package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +2 -2
  563. package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +2 -2
  564. package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +2 -2
  565. package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +5 -3
  566. package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +2 -2
  567. package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +18 -2
  568. package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +2 -2
  569. package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +2 -2
  570. package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +2 -2
  571. package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +2 -2
  572. package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +2 -2
  573. package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +2 -2
  574. package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +2 -2
  575. package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +2 -2
  576. package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +2 -2
  577. package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +2 -2
  578. package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +2 -2
  579. package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +2 -2
  580. package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +2 -2
  581. package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +2 -2
  582. package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +2 -2
  583. package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +2 -2
  584. package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +2 -2
  585. package/project/.sdk/tm/ocaml/feature/secrets/plugins/minivault.ml +1086 -0
  586. package/project/.sdk/tm/ocaml/feature/secrets/plugins/minivault_stubs.c +222 -0
  587. package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +2 -2
  588. package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +2 -2
  589. package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +2 -2
  590. package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +2 -2
  591. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +2 -2
  592. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +2 -2
  593. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +2 -2
  594. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +33 -3
  595. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +2 -2
  596. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +4 -3
  597. package/project/.sdk/tm/ocaml/sdk_features.ml +174 -0
  598. package/project/.sdk/tm/ocaml/sdk_runtime.ml +12 -37
  599. package/project/.sdk/tm/ocaml/src/feature/validate/.gitkeep +0 -0
  600. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
  601. package/project/.sdk/tm/perl/core/helpers.pm +64 -16
  602. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +2 -2
  603. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +2 -2
  604. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +2 -2
  605. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +2 -2
  606. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +2 -2
  607. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +3 -3
  608. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +2 -2
  609. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +19 -2
  610. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +2 -2
  611. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +2 -2
  612. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +2 -2
  613. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +2 -2
  614. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +2 -2
  615. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +2 -2
  616. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +2 -2
  617. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +2 -2
  618. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +2 -2
  619. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +2 -2
  620. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +2 -2
  621. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +2 -2
  622. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +2 -2
  623. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +2 -2
  624. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +2 -2
  625. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Minivault.pm +1380 -0
  626. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +2 -2
  627. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +2 -2
  628. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +2 -2
  629. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +2 -2
  630. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +2 -2
  631. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +4 -3
  632. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +2 -2
  633. package/project/.sdk/tm/perl/feature/validate_feature.pm +319 -0
  634. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  635. package/project/.sdk/tm/perl/src/feature/validate/.gitkeep +0 -0
  636. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  637. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  638. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  639. package/project/.sdk/tm/perl/utility/make_options.pm +25 -43
  640. package/project/.sdk/tm/php/feature/ValidateFeature.php +361 -0
  641. package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +2 -2
  642. package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +2 -2
  643. package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +2 -2
  644. package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +2 -2
  645. package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +2 -2
  646. package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +3 -3
  647. package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +2 -2
  648. package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +26 -2
  649. package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +2 -2
  650. package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +2 -2
  651. package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +2 -2
  652. package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +2 -2
  653. package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +2 -2
  654. package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +2 -2
  655. package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +2 -2
  656. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +2 -2
  657. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +2 -2
  658. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +2 -2
  659. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +2 -2
  660. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +2 -2
  661. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +2 -2
  662. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +2 -2
  663. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +2 -2
  664. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/minivault.php +1250 -0
  665. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +2 -2
  666. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +2 -2
  667. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +2 -2
  668. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +2 -2
  669. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +2 -2
  670. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +5 -3
  671. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +2 -2
  672. package/project/.sdk/tm/php/src/feature/validate/.gitkeep +0 -0
  673. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
  674. package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
  675. package/project/.sdk/tm/php/utility/MakeOptions.php +15 -31
  676. package/project/.sdk/tm/php/utility/struct/Struct.php +56 -7
  677. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  678. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  679. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  680. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  681. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  682. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  683. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +2 -2
  684. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  685. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +17 -1
  686. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  687. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  688. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  689. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  690. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  691. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  692. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +1 -1
  693. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  694. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +1 -1
  695. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  696. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  697. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  698. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  699. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +1 -1
  700. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  701. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +1 -1
  702. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/minivault.py +1202 -0
  703. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  704. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  705. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  706. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +2 -1
  707. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +1 -1
  708. package/project/.sdk/tm/py/pkg/feature/validate_feature.py +273 -0
  709. package/project/.sdk/tm/py/pkg/utility/make_options.py +14 -53
  710. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  711. package/project/.sdk/tm/py/src/feature/validate/.gitkeep +0 -0
  712. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  713. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +1 -1
  714. package/project/.sdk/tm/py/test/voxgig_omni/util.py +1 -1
  715. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +2 -2
  716. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +2 -2
  717. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +2 -2
  718. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +2 -2
  719. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +2 -2
  720. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +3 -3
  721. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +2 -2
  722. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +16 -2
  723. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +2 -2
  724. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +2 -2
  725. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +2 -2
  726. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +2 -2
  727. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +2 -2
  728. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +2 -2
  729. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +2 -2
  730. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +2 -2
  731. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +2 -2
  732. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +2 -2
  733. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +2 -2
  734. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +2 -2
  735. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +2 -2
  736. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +2 -2
  737. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +2 -2
  738. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +2 -2
  739. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/minivault.rb +979 -0
  740. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +2 -2
  741. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +2 -2
  742. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +2 -2
  743. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +6 -5
  744. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +2 -2
  745. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +2 -2
  746. package/project/.sdk/tm/rb/feature/validate_feature.rb +265 -0
  747. package/project/.sdk/tm/rb/src/feature/validate/.gitkeep +0 -0
  748. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
  749. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
  750. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
  751. package/project/.sdk/tm/rb/utility/make_options.rb +15 -32
  752. package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +24 -1
  753. package/project/.sdk/tm/rust/core/mod.rs +3 -2
  754. package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +2 -2
  755. package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +2 -2
  756. package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +2 -2
  757. package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +2 -2
  758. package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +2 -2
  759. package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +3 -3
  760. package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +2 -2
  761. package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +24 -2
  762. package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +2 -2
  763. package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +2 -2
  764. package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +2 -2
  765. package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +2 -2
  766. package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +2 -2
  767. package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +2 -2
  768. package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +2 -2
  769. package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +2 -2
  770. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +2 -2
  771. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +2 -2
  772. package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +2 -2
  773. package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +2 -2
  774. package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +2 -2
  775. package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +2 -2
  776. package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +2 -2
  777. package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +2 -2
  778. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +2 -2
  779. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +2 -2
  780. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +2 -2
  781. package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +2 -2
  782. package/project/.sdk/tm/rust/feature/secrets/plugins/minivault/format.rs +425 -0
  783. package/project/.sdk/tm/rust/feature/secrets/plugins/minivault.rs +1076 -0
  784. package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +2 -2
  785. package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +2 -2
  786. package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +2 -2
  787. package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +2 -2
  788. package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +30 -4
  789. package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +2 -2
  790. package/project/.sdk/tm/rust/feature/validate.rs +387 -0
  791. package/project/.sdk/tm/rust/src/feature/validate/.gitkeep +0 -0
  792. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
  793. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
  794. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
  795. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
  796. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
  797. package/project/.sdk/tm/rust/utility/make_options.rs +12 -63
  798. package/project/.sdk/tm/rust/utility/make_spec.rs +10 -3
  799. package/project/.sdk/tm/scala/feature/ValidateFeature.scala +286 -0
  800. package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +2 -2
  801. package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +2 -2
  802. package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +2 -2
  803. package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +2 -2
  804. package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +3 -3
  805. package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +2 -2
  806. package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +19 -2
  807. package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +2 -2
  808. package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +2 -2
  809. package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +2 -2
  810. package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +2 -2
  811. package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +2 -2
  812. package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +2 -2
  813. package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +2 -2
  814. package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +2 -2
  815. package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +2 -2
  816. package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +2 -2
  817. package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +2 -2
  818. package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +3 -2
  819. package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +2 -2
  820. package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +13 -2
  821. package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +11 -2
  822. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +2 -2
  823. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +2 -2
  824. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +2 -2
  825. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +2 -2
  826. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +2 -2
  827. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +2 -2
  828. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +2 -2
  829. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +2 -2
  830. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Minivault.scala +979 -0
  831. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +2 -2
  832. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +2 -2
  833. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +2 -2
  834. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
  835. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
  836. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
  837. package/project/.sdk/tm/scala/src/feature/validate/.gitkeep +0 -0
  838. package/project/.sdk/tm/scala/utility/Make.scala +12 -41
  839. package/project/.sdk/tm/scala/utility/MakeSpec.scala +8 -1
  840. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/ValidateFeature.swift +273 -0
  841. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +2 -2
  842. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +2 -2
  843. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +2 -2
  844. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +2 -2
  845. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +2 -2
  846. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +3 -3
  847. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +2 -2
  848. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +17 -2
  849. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +2 -2
  850. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +2 -2
  851. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +2 -2
  852. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +2 -2
  853. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +2 -2
  854. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +2 -2
  855. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +2 -2
  856. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +2 -2
  857. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +2 -2
  858. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +2 -2
  859. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +2 -2
  860. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +2 -2
  861. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +2 -2
  862. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +2 -2
  863. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +2 -2
  864. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +2 -2
  865. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +2 -2
  866. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +2 -2
  867. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +2 -2
  868. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +2 -2
  869. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +2 -2
  870. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +2 -2
  871. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +2 -2
  872. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +2 -2
  873. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +2 -2
  874. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +2 -2
  875. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Make.swift +9 -3
  876. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +12 -87
  877. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +3 -3
  878. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
  879. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
  880. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
  881. package/project/.sdk/tm/swift/src/feature/validate/.gitkeep +0 -0
  882. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  883. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  884. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  885. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  886. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  887. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +13 -2
  888. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  889. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  890. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +27 -1
  891. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  892. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  893. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  894. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  895. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  896. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  897. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  898. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  899. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  900. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  901. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  902. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  903. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  904. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  905. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  906. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  907. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  908. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/minivault.ts +1034 -0
  909. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  910. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  911. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  912. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  913. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +2 -1
  914. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  915. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  916. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  917. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  918. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +11 -1
  919. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +1 -1
  920. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  921. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  922. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  923. package/project/.sdk/tm/zig/core/utility.zig +20 -44
  924. package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +2 -2
  925. package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +2 -2
  926. package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +2 -2
  927. package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +2 -2
  928. package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +2 -2
  929. package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +3 -3
  930. package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +2 -2
  931. package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +18 -2
  932. package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +2 -2
  933. package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +2 -2
  934. package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +2 -2
  935. package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +2 -2
  936. package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +2 -2
  937. package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +2 -2
  938. package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +2 -2
  939. package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +2 -2
  940. package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +2 -2
  941. package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +2 -2
  942. package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +2 -2
  943. package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +2 -2
  944. package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +2 -2
  945. package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +2 -2
  946. package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +2 -2
  947. package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +2 -2
  948. package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +2 -2
  949. package/project/.sdk/tm/zig/feature/secrets/plugins/minivault.zig +1930 -0
  950. package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +2 -2
  951. package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +2 -2
  952. package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +2 -2
  953. package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +2 -2
  954. package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +3 -2
  955. package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +19 -2
  956. package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +2 -2
  957. package/project/.sdk/tm/zig/feature/validate.zig +293 -0
  958. package/project/.sdk/tm/zig/src/feature/validate/.gitkeep +0 -0
  959. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +2 -2
  960. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +2 -2
  961. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +2 -2
  962. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +2 -2
  963. package/project/sdkgen-package.json +1 -1
  964. package/src/helpers/applicability.ts +11 -6
  965. package/src/helpers/collectDeps.ts +30 -5
  966. package/src/helpers/naming.ts +2 -2
@@ -0,0 +1,1345 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260917-1242-0 (cpp/plugins/Minivault.cpp)
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
+ #include "Minivault.hpp"
5
+
6
+ #include <openssl/evp.h>
7
+ #include <openssl/hmac.h>
8
+ #include <openssl/rand.h>
9
+
10
+ #include <algorithm>
11
+ #include <cstdio>
12
+ #include <cstring>
13
+ #include <filesystem>
14
+ #include <fstream>
15
+ #include <map>
16
+ #include <memory>
17
+ #include <mutex>
18
+
19
+ #include "Json.hpp"
20
+ #include "Providers.hpp"
21
+ #include "Sekreto.hpp"
22
+
23
+ // THE SECOND FILE IN THIS PORT THAT INCLUDES <openssl/>, and the only
24
+ // other one. `Tls.cpp` is the first. AGENTS.md used to confine the
25
+ // dependency exception to cryptographic TRANSPORT, which is why
26
+ // `Crypto.cpp` writes SHA-256 and HMAC-SHA256 out by hand beside a linked
27
+ // OpenSSL that has both; the rule now covers cryptography, because a
28
+ // block cipher protecting secrets AT REST has properties no known-answer
29
+ // vector can check - a table-driven AES passes every vector in the world
30
+ // and still hands its key to anyone who can time a cache. `make
31
+ // check-core` proves the CORE still includes no <openssl/> header at all.
32
+ //
33
+ // THE FILE FORMAT, which is the contract between the ports:
34
+ //
35
+ // magic 4 'SKMV'
36
+ // version 1 FORMAT
37
+ // kdf 1 1 = PBKDF2-HMAC-SHA256
38
+ // cipher 1 1 = AES-256-GCM
39
+ // reserved 1 0
40
+ // keycount 4 uint32
41
+ // per key:
42
+ // id 1 + bytes the key id, PLAINTEXT
43
+ // salt 1 + bytes
44
+ // iters 4 PBKDF2 rounds for this key
45
+ // ring 1 + iv, 4 + bytes sealed under the passphrase
46
+ // meta 1 + iv, 4 + bytes sealed under the vault's meta key
47
+ // entrycount 4 uint32
48
+ // per entry:
49
+ // id 1 + bytes the blinded lookup id
50
+ // name 1 + iv, 4 + bytes sealed under the vault's name key
51
+ // value 1 + iv, 4 + bytes sealed under that secret's own key
52
+ //
53
+ // Integers are big-endian and every length precedes its bytes, so the
54
+ // file is written with the same two primitives it is read with.
55
+ //
56
+ // NOTHING OUTSIDE A KEY RECORD IS PLAINTEXT. Secret names are sealed, and
57
+ // an entry is addressed by a blinded id derived from its own key, so a
58
+ // restricted key finds what it was granted without the file ever naming
59
+ // the rest. What the file does show anyone is the key ids and how many
60
+ // secrets there are.
61
+ //
62
+ // A port of typescript/plugins/minivault.ts, which is canonical. The
63
+ // bytes are pinned by the vaults in test/fixture rather than left to
64
+ // agreement between implementations.
65
+
66
+ namespace sekreto {
67
+
68
+ const char* const VAULT_MASTERKEY = "master";
69
+ const int VAULT_ITERATIONS = 210000;
70
+ const char* const VAULT_EXPORT = "vault";
71
+
72
+ namespace minivaultfile {
73
+
74
+ struct Sealed {
75
+ std::vector<uint8_t> iv;
76
+ std::vector<uint8_t> blob;
77
+ };
78
+
79
+ struct KeyRecord {
80
+ std::string id;
81
+ std::vector<uint8_t> salt;
82
+ uint32_t iters = 0;
83
+ Sealed ring;
84
+ Sealed meta;
85
+ };
86
+
87
+ struct EntryRecord {
88
+ std::vector<uint8_t> id;
89
+ Sealed name;
90
+ Sealed value;
91
+ };
92
+
93
+ struct Vault {
94
+ std::vector<KeyRecord> keys;
95
+ std::vector<EntryRecord> entries;
96
+ };
97
+
98
+ } // namespace minivaultfile
99
+
100
+ namespace {
101
+
102
+ using minivaultfile::EntryRecord;
103
+ using minivaultfile::KeyRecord;
104
+ using minivaultfile::Sealed;
105
+
106
+ // --- the format ------------------------------------------------------
107
+
108
+ const char MAGIC[] = {'S', 'K', 'M', 'V'};
109
+ const uint8_t FORMAT = 1;
110
+ const uint8_t KDF_PBKDF2 = 1;
111
+ const uint8_t CIPHER_AESGCM = 1;
112
+
113
+ // AES-256-GCM: 32-byte keys, 12-byte nonces, 16-byte tags.
114
+ const size_t KEYLEN = 32;
115
+ const size_t IVLEN = 12;
116
+ const size_t TAGLEN = 16;
117
+ const size_t SALTLEN = 16;
118
+
119
+ // Additional authenticated data. Every blob is bound to its PLACE in the
120
+ // file, so no ciphertext can be moved: a restricted key's ring cannot be
121
+ // relabelled as the master's, and one secret's value cannot be served
122
+ // under a name it was never written for.
123
+ const char AAD_RING[] = "skmv1:ring:";
124
+ const char AAD_META[] = "skmv1:meta:";
125
+ const char AAD_NAME[] = "skmv1:name";
126
+ const char AAD_SECRET[] = "skmv1:secret:";
127
+
128
+ // Everything a master reaches is derived from the root key, so rotating
129
+ // is one new random value rather than a re-wrap of each part.
130
+ const char LABEL_NAMES[] = "skmv1:names";
131
+ const char LABEL_META[] = "skmv1:meta";
132
+ const char LABEL_ID[] = "skmv1:id";
133
+
134
+ // The largest key id the format can record.
135
+ //
136
+ // A length is written in ONE byte. A longer id wrapped that byte and the
137
+ // writer then appended the whole thing, so every field after it shifted:
138
+ // a grant with a 300-character id replaced a working vault with an
139
+ // unreadable one, and said nothing. Checked where an id is ACCEPTED, so
140
+ // the refusal names the id rather than the file.
141
+ const size_t IDMAX = 255;
142
+
143
+ [[noreturn]] void fail(const std::string& why) {
144
+ throw SekretoError("sekreto: minivault: " + why);
145
+ }
146
+
147
+ std::string checkid(const std::string& id, const std::string& what) {
148
+ if (id.empty()) fail(what);
149
+ if (IDMAX < id.size()) {
150
+ fail("key id is longer than " + std::to_string(IDMAX) + " bytes: " + id.substr(0, 32) + "...");
151
+ }
152
+ return id;
153
+ }
154
+
155
+ // --- bytes -----------------------------------------------------------
156
+
157
+ std::vector<uint8_t> bytesof(const std::string& text) {
158
+ return std::vector<uint8_t>(text.begin(), text.end());
159
+ }
160
+
161
+ std::string textof(const std::vector<uint8_t>& raw) {
162
+ return std::string(raw.begin(), raw.end());
163
+ }
164
+
165
+ // --- keys ------------------------------------------------------------
166
+
167
+ std::vector<uint8_t> mac(const std::vector<uint8_t>& key, const std::string& text) {
168
+ std::vector<uint8_t> out(KEYLEN);
169
+ unsigned int len = 0;
170
+
171
+ HMAC(EVP_sha256(), key.data(), static_cast<int>(key.size()),
172
+ reinterpret_cast<const unsigned char*>(text.data()), text.size(), out.data(), &len);
173
+
174
+ return out;
175
+ }
176
+
177
+ // The key-encryption key a passphrase unwraps a ring with.
178
+ //
179
+ // PBKDF2 refuses a round count below one, which is what a damaged or
180
+ // hostile file records to make the derivation free; that is refused
181
+ // rather than turned into a key derived from nothing.
182
+ std::vector<uint8_t> kek(const std::string& passphrase, const std::vector<uint8_t>& salt,
183
+ uint32_t iters) {
184
+ std::vector<uint8_t> out(KEYLEN);
185
+
186
+ if (1 > iters) fail("unusable round count: " + std::to_string(iters));
187
+
188
+ if (1 != PKCS5_PBKDF2_HMAC(passphrase.data(), static_cast<int>(passphrase.size()), salt.data(),
189
+ static_cast<int>(salt.size()), static_cast<int>(iters), EVP_sha256(),
190
+ static_cast<int>(KEYLEN), out.data())) {
191
+ fail("cannot derive a key");
192
+ }
193
+
194
+ return out;
195
+ }
196
+
197
+ // The key one named secret's value is encrypted with.
198
+ //
199
+ // DERIVED, never stored, for a master: it holds the root key and so
200
+ // reaches every name, including ones written after it was made. A
201
+ // restricted key holds the derived keys it was granted and nothing that
202
+ // produces another, so every other name is ciphertext to it in exactly
203
+ // the way it is to a stranger.
204
+ std::vector<uint8_t> secretkey(const std::vector<uint8_t>& root, const std::string& name) {
205
+ return mac(root, std::string(AAD_SECRET) + name);
206
+ }
207
+
208
+ // Where a secret lives in the file, derived from its own key so that
209
+ // finding it needs no plaintext name. One-way: an id yields nothing about
210
+ // the key that produced it.
211
+ std::vector<uint8_t> entryid(const std::vector<uint8_t>& key) { return mac(key, LABEL_ID); }
212
+
213
+ std::vector<uint8_t> randombytes(size_t len) {
214
+ std::vector<uint8_t> out(len);
215
+ if (1 != RAND_bytes(out.data(), static_cast<int>(len))) fail("no randomness available");
216
+ return out;
217
+ }
218
+
219
+ // --- sealing ---------------------------------------------------------
220
+
221
+ bool sameseal(const Sealed& left, const Sealed& right) {
222
+ return left.iv == right.iv && left.blob == right.blob;
223
+ }
224
+
225
+ // A scope guard, so that an OpenSSL context is released on every path -
226
+ // including the one where a refusal is thrown out of the middle.
227
+ class Cipher {
228
+ public:
229
+ Cipher() : ctx_(EVP_CIPHER_CTX_new()) {
230
+ if (nullptr == ctx_) fail("cannot reach the cipher");
231
+ }
232
+ ~Cipher() { EVP_CIPHER_CTX_free(ctx_); }
233
+
234
+ Cipher(const Cipher&) = delete;
235
+ Cipher& operator=(const Cipher&) = delete;
236
+
237
+ EVP_CIPHER_CTX* get() const { return ctx_; }
238
+
239
+ private:
240
+ EVP_CIPHER_CTX* ctx_;
241
+ };
242
+
243
+ // The tag rides at the END of the blob, which is where every other port's
244
+ // AEAD leaves it and therefore what the format records.
245
+ Sealed seal(const std::vector<uint8_t>& key, const std::vector<uint8_t>& plain,
246
+ const std::string& aad) {
247
+ if (KEYLEN != key.size()) fail("bad key");
248
+
249
+ Sealed out;
250
+ out.iv = randombytes(IVLEN);
251
+ out.blob.resize(plain.size() + TAGLEN);
252
+
253
+ Cipher cipher;
254
+ int len = 0;
255
+ const bool ok =
256
+ 1 == EVP_EncryptInit_ex(cipher.get(), EVP_aes_256_gcm(), nullptr, nullptr, nullptr) &&
257
+ 1 == EVP_CIPHER_CTX_ctrl(cipher.get(), EVP_CTRL_GCM_SET_IVLEN, static_cast<int>(IVLEN),
258
+ nullptr) &&
259
+ 1 == EVP_EncryptInit_ex(cipher.get(), nullptr, nullptr, key.data(), out.iv.data()) &&
260
+ 1 == EVP_EncryptUpdate(cipher.get(), nullptr, &len,
261
+ reinterpret_cast<const unsigned char*>(aad.data()),
262
+ static_cast<int>(aad.size())) &&
263
+ 1 == EVP_EncryptUpdate(cipher.get(), out.blob.data(), &len, plain.data(),
264
+ static_cast<int>(plain.size())) &&
265
+ 1 == EVP_EncryptFinal_ex(cipher.get(), out.blob.data() + len, &len) &&
266
+ 1 == EVP_CIPHER_CTX_ctrl(cipher.get(), EVP_CTRL_GCM_GET_TAG, static_cast<int>(TAGLEN),
267
+ out.blob.data() + plain.size());
268
+
269
+ if (!ok) fail("cannot seal");
270
+
271
+ return out;
272
+ }
273
+
274
+ // The plaintext, or a refusal. A GCM tag that fails to verify is the only
275
+ // evidence there is, and it cannot tell a wrong passphrase from a damaged
276
+ // file, so `what` names the attempt and the message admits both.
277
+ std::vector<uint8_t> unseal(const std::vector<uint8_t>& key, const Sealed& box,
278
+ const std::string& aad, const std::string& what) {
279
+ if (box.blob.size() < TAGLEN || IVLEN != box.iv.size()) fail(what + ": truncated");
280
+ if (KEYLEN != key.size()) fail("bad key");
281
+
282
+ const size_t cut = box.blob.size() - TAGLEN;
283
+ std::vector<uint8_t> plain(cut);
284
+
285
+ Cipher cipher;
286
+ int len = 0;
287
+ const bool ok =
288
+ 1 == EVP_DecryptInit_ex(cipher.get(), EVP_aes_256_gcm(), nullptr, nullptr, nullptr) &&
289
+ 1 == EVP_CIPHER_CTX_ctrl(cipher.get(), EVP_CTRL_GCM_SET_IVLEN, static_cast<int>(IVLEN),
290
+ nullptr) &&
291
+ 1 == EVP_DecryptInit_ex(cipher.get(), nullptr, nullptr, key.data(), box.iv.data()) &&
292
+ 1 == EVP_DecryptUpdate(cipher.get(), nullptr, &len,
293
+ reinterpret_cast<const unsigned char*>(aad.data()),
294
+ static_cast<int>(aad.size())) &&
295
+ 1 == EVP_DecryptUpdate(cipher.get(), plain.data(), &len, box.blob.data(),
296
+ static_cast<int>(cut)) &&
297
+ 1 == EVP_CIPHER_CTX_ctrl(cipher.get(), EVP_CTRL_GCM_SET_TAG, static_cast<int>(TAGLEN),
298
+ const_cast<uint8_t*>(box.blob.data() + cut)) &&
299
+ 0 < EVP_DecryptFinal_ex(cipher.get(), plain.data() + len, &len);
300
+
301
+ if (!ok) fail(what);
302
+
303
+ return plain;
304
+ }
305
+
306
+ // --- base64 ----------------------------------------------------------
307
+
308
+ // Here rather than in `Httpjson.hpp`, which is where the decoder the HTTP
309
+ // stores share lives: including that header for a base64 alphabet would
310
+ // put the whole HTTP client into the link of a store that opens nothing,
311
+ // which is what `make lean` measures.
312
+ const char B64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
313
+
314
+ std::string b64(const std::vector<uint8_t>& raw) {
315
+ std::string out;
316
+ out.reserve((raw.size() + 2) / 3 * 4);
317
+
318
+ for (size_t at = 0; at < raw.size(); at += 3) {
319
+ const size_t left = raw.size() - at;
320
+ unsigned long triple = static_cast<unsigned long>(raw[at]) << 16;
321
+ if (1 < left) triple |= static_cast<unsigned long>(raw[at + 1]) << 8;
322
+ if (2 < left) triple |= static_cast<unsigned long>(raw[at + 2]);
323
+
324
+ out.push_back(B64[(triple >> 18) & 0x3f]);
325
+ out.push_back(B64[(triple >> 12) & 0x3f]);
326
+ out.push_back(1 < left ? B64[(triple >> 6) & 0x3f] : '=');
327
+ out.push_back(2 < left ? B64[triple & 0x3f] : '=');
328
+ }
329
+
330
+ return out;
331
+ }
332
+
333
+ // STRICT. A lenient decoder hands back plausible bytes for a corrupted
334
+ // payload, and those bytes are then used AS A KEY.
335
+ std::vector<uint8_t> unb64(const std::string& text, const std::string& what) {
336
+ if (text.empty() || 0 != text.size() % 4) fail("missing " + what);
337
+
338
+ std::vector<uint8_t> out;
339
+ int bits = 0;
340
+ unsigned long held = 0;
341
+ size_t pad = 0;
342
+
343
+ for (size_t at = 0; at < text.size(); at++) {
344
+ const char ch = text[at];
345
+
346
+ if ('=' == ch) {
347
+ pad++;
348
+ if (2 < pad || text.size() - 2 > at + pad) fail("missing " + what);
349
+ continue;
350
+ }
351
+ if (0 != pad) fail("missing " + what);
352
+
353
+ const char* found = std::strchr(B64, ch);
354
+ if (nullptr == found || '\0' == ch) fail("missing " + what);
355
+
356
+ held = (held << 6) | static_cast<unsigned long>(found - B64);
357
+ bits += 6;
358
+
359
+ if (8 <= bits) {
360
+ bits -= 8;
361
+ out.push_back(static_cast<uint8_t>((held >> bits) & 0xff));
362
+ }
363
+ }
364
+
365
+ return out;
366
+ }
367
+
368
+ // --- reading and writing the file ------------------------------------
369
+
370
+ // A cursor, so that every length check is in one place: a truncated vault
371
+ // is refused rather than read as a short one.
372
+ class Reader {
373
+ public:
374
+ explicit Reader(const std::vector<uint8_t>& bytes) : bytes_(bytes) {}
375
+
376
+ // Reads `length` bytes, or refuses.
377
+ //
378
+ // The bound is checked AGAINST WHAT IS LEFT, never by adding the length
379
+ // to the cursor: a damaged vault can encode a length near 0xffffffff,
380
+ // and the sum would wrap and hand back a slice the caller had no
381
+ // business seeing.
382
+ std::vector<uint8_t> take(uint64_t length) {
383
+ if (static_cast<uint64_t>(bytes_.size() - at_) < length) fail("the vault file is truncated");
384
+ const size_t from = at_;
385
+ at_ += static_cast<size_t>(length);
386
+ return std::vector<uint8_t>(bytes_.begin() + static_cast<long>(from),
387
+ bytes_.begin() + static_cast<long>(at_));
388
+ }
389
+
390
+ uint8_t u8() { return take(1)[0]; }
391
+
392
+ uint32_t u32() {
393
+ const std::vector<uint8_t> raw = take(4);
394
+ return (static_cast<uint32_t>(raw[0]) << 24) | (static_cast<uint32_t>(raw[1]) << 16) |
395
+ (static_cast<uint32_t>(raw[2]) << 8) | static_cast<uint32_t>(raw[3]);
396
+ }
397
+
398
+ std::vector<uint8_t> small() { return take(u8()); }
399
+ std::vector<uint8_t> large() { return take(u32()); }
400
+
401
+ Sealed sealed() {
402
+ Sealed out;
403
+ // The iv is read before the blob, and the two statements keep that
404
+ // order; a brace initialiser would not, because the order of
405
+ // evaluation of its elements is unspecified before C++17 for some
406
+ // forms and easy to get wrong in any.
407
+ out.iv = small();
408
+ out.blob = large();
409
+ return out;
410
+ }
411
+
412
+ size_t left() const { return bytes_.size() - at_; }
413
+ bool done() const { return bytes_.size() == at_; }
414
+
415
+ private:
416
+ const std::vector<uint8_t>& bytes_;
417
+ size_t at_ = 0;
418
+ };
419
+
420
+ minivaultfile::Vault readfile(const std::vector<uint8_t>& raw) {
421
+ Reader read(raw);
422
+
423
+ const std::vector<uint8_t> magic = read.take(4);
424
+ if (0 != std::memcmp(MAGIC, magic.data(), 4)) fail("not a vault file");
425
+
426
+ const uint8_t version = read.u8();
427
+ if (FORMAT != version) fail("unsupported format version: " + std::to_string(version));
428
+
429
+ const uint8_t kdf = read.u8();
430
+ const uint8_t cipher = read.u8();
431
+ if (KDF_PBKDF2 != kdf || CIPHER_AESGCM != cipher) {
432
+ fail("unsupported kdf or cipher: " + std::to_string(kdf) + "/" + std::to_string(cipher));
433
+ }
434
+ read.u8();
435
+
436
+ minivaultfile::Vault out;
437
+
438
+ // A COUNT IS BOUNDED BY WHAT IS LEFT. Each record carries at least a few
439
+ // bytes, so a file claiming four billion of them is damaged; the loop
440
+ // would find that out one truncation at a time, and `reserve` would not.
441
+ uint32_t count = read.u32();
442
+ if (read.left() < count) fail("the vault file is truncated");
443
+ for (uint32_t index = 0; index < count; index++) {
444
+ KeyRecord record;
445
+ record.id = textof(read.small());
446
+ record.salt = read.small();
447
+ record.iters = read.u32();
448
+ record.ring = read.sealed();
449
+ record.meta = read.sealed();
450
+ out.keys.push_back(std::move(record));
451
+ }
452
+
453
+ count = read.u32();
454
+ if (read.left() < count) fail("the vault file is truncated");
455
+ for (uint32_t index = 0; index < count; index++) {
456
+ EntryRecord record;
457
+ record.id = read.small();
458
+ record.name = read.sealed();
459
+ record.value = read.sealed();
460
+ out.entries.push_back(std::move(record));
461
+ }
462
+
463
+ if (!read.done()) fail("the vault file has trailing bytes");
464
+
465
+ return out;
466
+ }
467
+
468
+ class Writer {
469
+ public:
470
+ void u8(uint8_t value) { out.push_back(value); }
471
+
472
+ void u32(uint32_t value) {
473
+ u8(static_cast<uint8_t>((value >> 24) & 0xff));
474
+ u8(static_cast<uint8_t>((value >> 16) & 0xff));
475
+ u8(static_cast<uint8_t>((value >> 8) & 0xff));
476
+ u8(static_cast<uint8_t>(value & 0xff));
477
+ }
478
+
479
+ void small(const std::vector<uint8_t>& value) {
480
+ u8(static_cast<uint8_t>(value.size()));
481
+ out.insert(out.end(), value.begin(), value.end());
482
+ }
483
+
484
+ void large(const std::vector<uint8_t>& value) {
485
+ u32(static_cast<uint32_t>(value.size()));
486
+ out.insert(out.end(), value.begin(), value.end());
487
+ }
488
+
489
+ void sealed(const Sealed& value) {
490
+ small(value.iv);
491
+ large(value.blob);
492
+ }
493
+
494
+ std::vector<uint8_t> out;
495
+ };
496
+
497
+ std::vector<uint8_t> writefile(const minivaultfile::Vault& file) {
498
+ Writer write;
499
+
500
+ write.out.insert(write.out.end(), MAGIC, MAGIC + 4);
501
+ write.u8(FORMAT);
502
+ write.u8(KDF_PBKDF2);
503
+ write.u8(CIPHER_AESGCM);
504
+ write.u8(0);
505
+
506
+ write.u32(static_cast<uint32_t>(file.keys.size()));
507
+ for (const KeyRecord& record : file.keys) {
508
+ write.small(bytesof(record.id));
509
+ write.small(record.salt);
510
+ write.u32(record.iters);
511
+ write.sealed(record.ring);
512
+ write.sealed(record.meta);
513
+ }
514
+
515
+ // SORTED BY ID, which is a blinded value: the file therefore records
516
+ // nothing about the order secrets were written in.
517
+ std::vector<EntryRecord> entries = file.entries;
518
+ std::sort(entries.begin(), entries.end(),
519
+ [](const EntryRecord& left, const EntryRecord& right) { return left.id < right.id; });
520
+
521
+ write.u32(static_cast<uint32_t>(entries.size()));
522
+ for (const EntryRecord& record : entries) {
523
+ write.small(record.id);
524
+ write.sealed(record.name);
525
+ write.sealed(record.value);
526
+ }
527
+
528
+ return write.out;
529
+ }
530
+
531
+ // --- the file on disk ------------------------------------------------
532
+
533
+ // Read as BINARY, byte for byte. `std::getline` and a text-mode stream
534
+ // would both lie about a vault, which is full of NULs and of bytes no
535
+ // encoding claims.
536
+ bool slurp(const std::string& path, std::vector<uint8_t>& out) {
537
+ std::ifstream in(path, std::ios::binary);
538
+ if (!in) return false;
539
+
540
+ out.assign(std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>());
541
+
542
+ return true;
543
+ }
544
+
545
+ // Owner-only, because a vault file is the whole store, and EXCLUSIVE when
546
+ // asked: an exclusive create refuses an existing path and will not follow
547
+ // a symlink to make one, which is what makes the temporary below safe to
548
+ // name in a directory somebody else can write.
549
+ //
550
+ // `open` rather than `std::ofstream`, because the standard library has no
551
+ // way to ask for either. Errors come back as errno, so the caller can
552
+ // tell "already there" from "could not write".
553
+ int spill(const std::string& path, const std::vector<uint8_t>& raw, bool exclusive);
554
+
555
+ std::string jsonstring(const std::string& text) { return Json::quote(text); }
556
+
557
+ } // namespace
558
+ } // namespace sekreto
559
+
560
+ #include <fcntl.h>
561
+ #include <unistd.h>
562
+
563
+ namespace sekreto {
564
+ namespace {
565
+
566
+ int spill(const std::string& path, const std::vector<uint8_t>& raw, bool exclusive) {
567
+ const int flags = O_WRONLY | O_CREAT | (exclusive ? O_EXCL : O_TRUNC);
568
+ const int fd = ::open(path.c_str(), flags, 0600);
569
+
570
+ if (0 > fd) return errno;
571
+
572
+ size_t at = 0;
573
+ while (at < raw.size()) {
574
+ const ssize_t put = ::write(fd, raw.data() + at, raw.size() - at);
575
+ if (0 > put) {
576
+ if (EINTR == errno) continue;
577
+ const int why = errno;
578
+ ::close(fd);
579
+ ::unlink(path.c_str());
580
+ return why;
581
+ }
582
+ at += static_cast<size_t>(put);
583
+ }
584
+
585
+ if (0 != ::close(fd)) {
586
+ const int why = errno;
587
+ ::unlink(path.c_str());
588
+ return why;
589
+ }
590
+
591
+ return 0;
592
+ }
593
+
594
+ std::string hex(const std::vector<uint8_t>& raw) {
595
+ static const char digits[] = "0123456789abcdef";
596
+ std::string out;
597
+
598
+ for (uint8_t byte : raw) {
599
+ out.push_back(digits[(byte >> 4) & 0x0f]);
600
+ out.push_back(digits[byte & 0x0f]);
601
+ }
602
+
603
+ return out;
604
+ }
605
+
606
+ KeyRecord sealkey(const std::vector<uint8_t>& root, const std::string& id,
607
+ const std::string& passphrase, uint32_t iters, const std::string& ring,
608
+ const std::string& meta) {
609
+ KeyRecord out;
610
+
611
+ out.id = id;
612
+ out.iters = iters;
613
+ out.salt = randombytes(SALTLEN);
614
+ out.ring = seal(kek(passphrase, out.salt, iters), bytesof(ring), std::string(AAD_RING) + id);
615
+ out.meta = seal(mac(root, LABEL_META), bytesof(meta), std::string(AAD_META) + id);
616
+
617
+ return out;
618
+ }
619
+
620
+ // The one key record a new or rotated vault starts with: a master holding
621
+ // the root, granted nothing because it needs nothing.
622
+ KeyRecord masterkey(const std::vector<uint8_t>& root, const std::string& id,
623
+ const std::string& passphrase, uint32_t iters) {
624
+ const std::string ring = "{\"v\":" + std::to_string(FORMAT) + ",\"write\":true,\"root\":" +
625
+ jsonstring(b64(root)) + "}";
626
+ const std::string meta =
627
+ "{\"v\":" + std::to_string(FORMAT) + ",\"master\":true,\"write\":true,\"grants\":[]}";
628
+
629
+ return sealkey(root, id, passphrase, iters, ring, meta);
630
+ }
631
+
632
+ // A JSON `true`, and nothing else. A missing field, a null and the string
633
+ // "true" are all false: the ring says what a key may do, and reading a
634
+ // damaged one permissively is how a read-only key becomes a writing one.
635
+ bool jsontrue(const Json& val) { return val.isbool() && val.boolval; }
636
+
637
+ // --- where the vaults live -------------------------------------------
638
+
639
+ // voxgig/plugin's values are numbers, strings, lists and maps - not
640
+ // pointers - so a definition exports the TICKET of what it made and
641
+ // `vaultof` looks it up, exactly as `providerplugin` exports a ticket for
642
+ // the provider.
643
+ //
644
+ // Unlike `providerslot`, this table is NOT emptied when the ticket is
645
+ // claimed: `vaultof` is called after construction, as often as an
646
+ // application likes. It holds WEAK pointers, so the vault's life is the
647
+ // provider's - a chain that has been destroyed leaves an expired ticket,
648
+ // and `vaultof` refuses instead of handing back a dangling handle. Expired
649
+ // entries are dropped when the next one is parked, so the table is bounded
650
+ // by the number of live vaults rather than by the number ever built.
651
+ //
652
+ // Process-global with a mutex, NOT thread_local like `providerslot`: that
653
+ // one is filled and claimed in one synchronous call on one thread, and
654
+ // this one is read by whatever thread later asks for the API.
655
+ struct Vaults {
656
+ std::mutex lock;
657
+ std::map<double, std::weak_ptr<MiniVault>> held;
658
+ double next = 1;
659
+ };
660
+
661
+ Vaults& vaults() {
662
+ static Vaults one;
663
+ return one;
664
+ }
665
+
666
+ double parkvault(const std::shared_ptr<MiniVault>& vault) {
667
+ Vaults& one = vaults();
668
+ std::lock_guard<std::mutex> guard(one.lock);
669
+
670
+ for (auto at = one.held.begin(); one.held.end() != at;) {
671
+ at = at->second.expired() ? one.held.erase(at) : std::next(at);
672
+ }
673
+
674
+ const double ticket = one.next;
675
+ one.next = ticket + 1;
676
+ one.held[ticket] = vault;
677
+
678
+ return ticket;
679
+ }
680
+
681
+ std::shared_ptr<MiniVault> vaultat(double ticket) {
682
+ Vaults& one = vaults();
683
+ std::lock_guard<std::mutex> guard(one.lock);
684
+
685
+ auto at = one.held.find(ticket);
686
+ if (one.held.end() == at) return nullptr;
687
+
688
+ return at->second.lock();
689
+ }
690
+
691
+ // --- the provider ----------------------------------------------------
692
+
693
+ /// Reads a vault as one store in a chain.
694
+ ///
695
+ /// The provider is the READ half and nothing more: a chain resolves
696
+ /// secrets, and writing one is a deliberate act with an API of its own.
697
+ /// That API is the same handle, reached with `vaultof` off a chain or
698
+ /// built directly with `openvault`.
699
+ class MiniVaultProvider : public Provider {
700
+ public:
701
+ explicit MiniVaultProvider(std::shared_ptr<MiniVault> vault) : vault_(std::move(vault)) {}
702
+
703
+ std::optional<std::string> lookup(const std::string& name) override {
704
+ return vault_->get(name);
705
+ }
706
+
707
+ std::string describe() const override { return "minivault:" + vault_->file(); }
708
+
709
+ const std::shared_ptr<MiniVault>& vault() const { return vault_; }
710
+
711
+ private:
712
+ std::shared_ptr<MiniVault> vault_;
713
+ };
714
+
715
+ } // namespace
716
+
717
+ // --- the vault -------------------------------------------------------
718
+
719
+ MiniVault::MiniVault(std::string file, std::string key, std::string passphrase, int iterations,
720
+ bool create)
721
+ : file_(std::move(file)),
722
+ key_(std::move(key)),
723
+ passphrase_(std::move(passphrase)),
724
+ iterations_(iterations),
725
+ create_(create) {}
726
+
727
+ MiniVault::~MiniVault() = default;
728
+
729
+ void MiniVault::close() {
730
+ opened_ = false;
731
+ master_ = false;
732
+ write_ = false;
733
+ root_.clear();
734
+ grants_.clear();
735
+ ring_.reset();
736
+ }
737
+
738
+ minivaultfile::Vault MiniVault::fresh(const std::string& keyid, const std::string& passphrase,
739
+ int iterations) {
740
+ minivaultfile::Vault out;
741
+ const std::vector<uint8_t> root = randombytes(KEYLEN);
742
+
743
+ out.keys.push_back(masterkey(root, keyid, passphrase, static_cast<uint32_t>(iterations)));
744
+
745
+ return out;
746
+ }
747
+
748
+ // Writes a vault file that is not there yet, and REFUSES one that is.
749
+ //
750
+ // Straight to the target under an exclusive create rather than through a
751
+ // temporary and a rename. A rename REPLACES its destination, so two
752
+ // processes creating the same vault both succeeded and the second
753
+ // discarded the first one's secrets; a stat beforehand only narrows that
754
+ // window. There is nothing to lose by writing the target directly here,
755
+ // because there is no file to damage: either this call creates it or it
756
+ // fails.
757
+ void MiniVault::putnew(const minivaultfile::Vault& file) {
758
+ const int why = spill(file_, writefile(file), true);
759
+
760
+ if (0 == why) return;
761
+ if (EEXIST == why) fail("vault file already exists: " + file_);
762
+
763
+ fail("cannot write " + file_);
764
+ }
765
+
766
+ // Replaces the file rather than editing it in place. The rename is what
767
+ // makes a concurrent reader see either the old file or the new one, so a
768
+ // write interrupted halfway leaves a vault rather than wreckage.
769
+ //
770
+ // THE TEMPORARY IS RANDOM AND EXCLUSIVE. `<vault>.<pid>.tmp` is a name
771
+ // anyone can predict, and an ordinary create FOLLOWS a symlink, so anyone
772
+ // who could write the vault's directory could point that name at another
773
+ // file and have the next save truncate it.
774
+ void MiniVault::save(const minivaultfile::Vault& file) {
775
+ const std::string temp = file_ + "." + hex(randombytes(8)) + ".tmp";
776
+
777
+ if (0 != spill(temp, writefile(file), true)) fail("cannot write " + file_);
778
+
779
+ if (0 != std::rename(temp.c_str(), file_.c_str())) {
780
+ // The vault is unchanged either way, and the write error is what the
781
+ // caller needs to be told about.
782
+ ::unlink(temp.c_str());
783
+ fail("cannot write " + file_);
784
+ }
785
+ }
786
+
787
+ // The file as this key sees it: parsed every call - it is different bytes
788
+ // every time - while the unwrapped ring is kept, because stretching a
789
+ // passphrase once per lookup is the cost that caching exists to avoid.
790
+ minivaultfile::Vault MiniVault::read() {
791
+ std::vector<uint8_t> raw;
792
+
793
+ if (!slurp(file_, raw)) {
794
+ // A vault is configured deliberately, with a key. Its absence is a
795
+ // broken deployment and never "no secrets here": answering a miss
796
+ // would send the chain on to a weaker store, which is the failure
797
+ // mode this library most has to avoid. `create` is the caller saying
798
+ // the opposite, in writing.
799
+ if (!create_) fail("no vault file: " + file_);
800
+
801
+ putnew(fresh(key_, passphrase_, iterations_));
802
+
803
+ if (!slurp(file_, raw)) fail("cannot read " + file_);
804
+ }
805
+
806
+ minivaultfile::Vault file = readfile(raw);
807
+
808
+ const KeyRecord* record = nullptr;
809
+ for (const KeyRecord& held : file.keys) {
810
+ if (key_ == held.id) record = &held;
811
+ }
812
+
813
+ if (nullptr == record) {
814
+ // REVOKED, or never there. Either way this handle is finished, and
815
+ // dropping what it derived is what stops the next call answering from
816
+ // memory.
817
+ close();
818
+ fail("no such key: " + key_);
819
+ }
820
+
821
+ // The file still holds this key, and holds the SAME ring: a key revoked
822
+ // and re-granted under another passphrase is a different key wearing
823
+ // the id, and re-deriving is what refuses it.
824
+ if (opened_ && nullptr != ring_ && sameseal(*ring_, record->ring)) return file;
825
+ close();
826
+
827
+ const std::vector<uint8_t> plain =
828
+ unseal(kek(passphrase_, record->salt, record->iters), record->ring,
829
+ std::string(AAD_RING) + key_,
830
+ "wrong passphrase for key " + key_ + ", or a damaged vault");
831
+
832
+ Json held;
833
+ if (!Json::parse(textof(plain), held) || !held.isobj()) {
834
+ fail("unreadable key ring for " + key_);
835
+ }
836
+
837
+ const Json grants = held.get("grants");
838
+ if (grants.isobj()) {
839
+ for (const auto& pair : grants.objval) {
840
+ std::string text;
841
+ if (!pair.second.asstr(text)) fail("missing a granted key");
842
+ grants_[pair.first] = unb64(text, "a granted key");
843
+ }
844
+ }
845
+
846
+ std::string root;
847
+ if (held.get("root").asstr(root)) {
848
+ root_ = unb64(root, "the root key");
849
+ master_ = true;
850
+ }
851
+
852
+ write_ = master_ || jsontrue(held.get("write"));
853
+ ring_ = std::make_unique<Sealed>(record->ring);
854
+ opened_ = true;
855
+
856
+ return file;
857
+ }
858
+
859
+ // The root key, or a refusal naming what needed it.
860
+ std::vector<uint8_t> MiniVault::rootof(const std::string& what) {
861
+ if (!master_) fail(what + " needs a master key, and " + key_ + " is restricted");
862
+ return root_;
863
+ }
864
+
865
+ // The key for one name, or nothing when this key cannot reach it.
866
+ std::optional<std::vector<uint8_t>> MiniVault::keyfor(const std::string& name) {
867
+ if (master_) return secretkey(root_, name);
868
+
869
+ auto at = grants_.find(name);
870
+ if (grants_.end() == at) return std::nullopt;
871
+
872
+ return at->second;
873
+ }
874
+
875
+ VaultKeyInfo MiniVault::open() {
876
+ read();
877
+
878
+ std::vector<std::string> names;
879
+ for (const auto& pair : grants_) names.push_back(pair.first);
880
+ std::sort(names.begin(), names.end());
881
+
882
+ return VaultKeyInfo(key_, master_, write_, names);
883
+ }
884
+
885
+ std::vector<std::string> MiniVault::list() {
886
+ const minivaultfile::Vault file = read();
887
+ std::vector<std::string> names;
888
+
889
+ if (master_) {
890
+ const std::vector<uint8_t> namekey = mac(root_, LABEL_NAMES);
891
+ for (const EntryRecord& entry : file.entries) {
892
+ names.push_back(
893
+ textof(unseal(namekey, entry.name, AAD_NAME, "a secret name is damaged")));
894
+ }
895
+ } else {
896
+ // A restricted key has no name key, so it reports the grants it can
897
+ // actually find: the vault never tells it what else is there.
898
+ for (const auto& pair : grants_) {
899
+ const std::vector<uint8_t> want = entryid(pair.second);
900
+ for (const EntryRecord& entry : file.entries) {
901
+ if (want == entry.id) {
902
+ names.push_back(pair.first);
903
+ break;
904
+ }
905
+ }
906
+ }
907
+ }
908
+
909
+ std::sort(names.begin(), names.end());
910
+
911
+ return names;
912
+ }
913
+
914
+ std::optional<std::string> MiniVault::get(const std::string& name) {
915
+ checkname(name);
916
+
917
+ const minivaultfile::Vault file = read();
918
+
919
+ // OUTSIDE THE GRANT IS A MISS, deliberately. The vault answers as the
920
+ // key that opened it, so a name this key cannot read is a name this
921
+ // store does not hold for this caller - the same answer a stranger's
922
+ // vault gives, and the one that makes a restricted key in front of a
923
+ // broader store a workable chain.
924
+ const std::optional<std::vector<uint8_t>> key = keyfor(name);
925
+ if (!key.has_value()) return std::nullopt;
926
+
927
+ const std::vector<uint8_t> want = entryid(*key);
928
+ for (const EntryRecord& entry : file.entries) {
929
+ if (want == entry.id) {
930
+ return textof(unseal(*key, entry.value, std::string(AAD_SECRET) + name,
931
+ "the value of " + name + " is damaged"));
932
+ }
933
+ }
934
+
935
+ return std::nullopt;
936
+ }
937
+
938
+ bool MiniVault::has(const std::string& name) { return get(name).has_value(); }
939
+
940
+ // THE LOCK EVERY HANDLE ON ONE FILE SHARES.
941
+ //
942
+ // Each MiniVault is its own object, so two handles on one path did not
943
+ // coordinate: both could finish `load()` before either saved, and the
944
+ // second rename then discarded the first one's change while reporting
945
+ // success. Keyed by the ABSOLUTE path, so two handles spelled differently
946
+ // still meet.
947
+ //
948
+ // A guarantee WITHIN one process, which is what DOCS.md promises and what
949
+ // the go port arranges the same way. Two processes still race, and the
950
+ // format's answer to that is the exclusive create and the atomic rename:
951
+ // a reader sees one whole vault or the other, never half of one.
952
+ //
953
+ // `recursive_mutex`, because it costs nothing and a mutating method that
954
+ // ever reached another would otherwise deadlock rather than misbehave.
955
+ std::recursive_mutex& lockfor(const std::string& file) {
956
+ static std::mutex table;
957
+ static std::map<std::string, std::unique_ptr<std::recursive_mutex>> held;
958
+
959
+ std::string key = file;
960
+ try {
961
+ key = std::filesystem::absolute(file).lexically_normal().string();
962
+ } catch (const std::exception&) {
963
+ key = file;
964
+ }
965
+
966
+ std::lock_guard<std::mutex> guard(table);
967
+ std::unique_ptr<std::recursive_mutex>& one = held[key];
968
+ if (nullptr == one) {
969
+ one = std::make_unique<std::recursive_mutex>();
970
+ }
971
+
972
+ return *one;
973
+ }
974
+
975
+ void MiniVault::set(const std::string& name, const std::string& value) {
976
+ // Every write on this file, from any handle in this process,
977
+ // serializes here; see lockfor.
978
+ std::lock_guard<std::recursive_mutex> guard(lockfor(file_));
979
+
980
+ checkname(name);
981
+
982
+ minivaultfile::Vault file = read();
983
+
984
+ if (!write_) fail("key " + key_ + " is read-only");
985
+
986
+ const std::optional<std::vector<uint8_t>> key = keyfor(name);
987
+ if (!key.has_value()) fail("key " + key_ + " was not granted " + name);
988
+
989
+ const Sealed box = seal(*key, bytesof(value), std::string(AAD_SECRET) + name);
990
+ const std::vector<uint8_t> id = entryid(*key);
991
+
992
+ bool found = false;
993
+ for (EntryRecord& entry : file.entries) {
994
+ if (id == entry.id) {
995
+ entry.value = box;
996
+ found = true;
997
+ break;
998
+ }
999
+ }
1000
+
1001
+ if (!found) {
1002
+ // A NEW NAME NEEDS THE NAME KEY, which only a master holds. So a
1003
+ // restricted key with `write` updates what it was granted and cannot
1004
+ // grow the vault, which is what "restricted" has to mean for the
1005
+ // grant list to stay the whole story.
1006
+ const std::vector<uint8_t> root = rootof("creating the secret " + name);
1007
+
1008
+ EntryRecord made;
1009
+ made.id = id;
1010
+ made.name = seal(mac(root, LABEL_NAMES), bytesof(name), AAD_NAME);
1011
+ made.value = box;
1012
+ file.entries.push_back(std::move(made));
1013
+ }
1014
+
1015
+ save(file);
1016
+ }
1017
+
1018
+ void MiniVault::remove(const std::string& name) {
1019
+ // Every write on this file, from any handle in this process,
1020
+ // serializes here; see lockfor.
1021
+ std::lock_guard<std::recursive_mutex> guard(lockfor(file_));
1022
+
1023
+ checkname(name);
1024
+
1025
+ minivaultfile::Vault file = read();
1026
+ const std::vector<uint8_t> root = rootof("removing a secret");
1027
+ const std::vector<uint8_t> want = entryid(secretkey(root, name));
1028
+
1029
+ std::vector<EntryRecord> kept;
1030
+ bool found = false;
1031
+
1032
+ for (EntryRecord& entry : file.entries) {
1033
+ if (!found && want == entry.id) {
1034
+ found = true;
1035
+ continue;
1036
+ }
1037
+ kept.push_back(std::move(entry));
1038
+ }
1039
+
1040
+ if (!found) fail("no such secret: " + name);
1041
+
1042
+ file.entries = std::move(kept);
1043
+
1044
+ save(file);
1045
+ }
1046
+
1047
+ std::vector<VaultKeyInfo> MiniVault::keys() {
1048
+ const minivaultfile::Vault file = read();
1049
+ const std::vector<uint8_t> root = rootof("listing the keys");
1050
+ const std::vector<uint8_t> metakey = mac(root, LABEL_META);
1051
+
1052
+ std::vector<VaultKeyInfo> out;
1053
+
1054
+ for (const KeyRecord& record : file.keys) {
1055
+ bool master = false;
1056
+ bool write = false;
1057
+ std::vector<std::string> names;
1058
+
1059
+ // A record written under a root key this one has replaced is still in
1060
+ // the file and still opens with its own passphrase, so it is reported
1061
+ // rather than hidden - with what it can do unknown.
1062
+ try {
1063
+ const std::vector<uint8_t> plain = unseal(
1064
+ metakey, record.meta, std::string(AAD_META) + record.id, "metadata");
1065
+
1066
+ Json noted;
1067
+ if (!Json::parse(textof(plain), noted) || !noted.isobj()) {
1068
+ fail("unreadable metadata for key " + record.id);
1069
+ }
1070
+
1071
+ master = jsontrue(noted.get("master"));
1072
+ write = jsontrue(noted.get("write"));
1073
+
1074
+ const Json grants = noted.get("grants");
1075
+ if (grants.isarr()) {
1076
+ for (const Json& item : grants.arrval) {
1077
+ std::string name;
1078
+ if (item.asstr(name)) names.push_back(name);
1079
+ }
1080
+ }
1081
+ std::sort(names.begin(), names.end());
1082
+ } catch (const SekretoError&) {
1083
+ // Left as it started: unknown.
1084
+ }
1085
+
1086
+ out.emplace_back(record.id, master, write, names);
1087
+ }
1088
+
1089
+ return out;
1090
+ }
1091
+
1092
+ void MiniVault::grant(const GrantSpec& spec) {
1093
+ // Every write on this file, from any handle in this process,
1094
+ // serializes here; see lockfor.
1095
+ std::lock_guard<std::recursive_mutex> guard(lockfor(file_));
1096
+
1097
+ minivaultfile::Vault file = read();
1098
+ const std::vector<uint8_t> root = rootof("granting a key");
1099
+
1100
+ checkid(spec.key, "a grant needs a key id");
1101
+ if (spec.passphrase.empty()) fail("a grant needs a passphrase");
1102
+
1103
+ for (const KeyRecord& record : file.keys) {
1104
+ if (spec.key == record.id) fail("key already exists: " + spec.key);
1105
+ }
1106
+
1107
+ std::vector<std::string> names = spec.names;
1108
+ std::sort(names.begin(), names.end());
1109
+
1110
+ // Written out rather than built as a Json and stringified, because
1111
+ // `false` and `true` must be literals and the two documents are three
1112
+ // fields each. Every string goes through the JSON quoter: a name is
1113
+ // `[a-z0-9_.]` by the time it reaches here, but "this cannot contain a
1114
+ // quote" is exactly the assumption that stops being true when a rule
1115
+ // moves.
1116
+ std::string ring = "{\"v\":" + std::to_string(FORMAT) +
1117
+ ",\"write\":" + (spec.write ? "true" : "false") + ",\"grants\":{";
1118
+ std::string meta = "{\"v\":" + std::to_string(FORMAT) + ",\"master\":false,\"write\":" +
1119
+ (spec.write ? "true" : "false") + ",\"grants\":[";
1120
+
1121
+ for (size_t at = 0; at < names.size(); at++) {
1122
+ checkname(names[at]);
1123
+
1124
+ if (0 < at) {
1125
+ ring += ",";
1126
+ meta += ",";
1127
+ }
1128
+
1129
+ ring += jsonstring(names[at]) + ":" + jsonstring(b64(secretkey(root, names[at])));
1130
+ meta += jsonstring(names[at]);
1131
+ }
1132
+
1133
+ ring += "}}";
1134
+ meta += "]}";
1135
+
1136
+ file.keys.push_back(sealkey(root, spec.key, spec.passphrase,
1137
+ static_cast<uint32_t>(0 < spec.iterations ? spec.iterations
1138
+ : iterations_),
1139
+ ring, meta));
1140
+
1141
+ save(file);
1142
+ }
1143
+
1144
+ void MiniVault::revoke(const std::string& key) {
1145
+ // Every write on this file, from any handle in this process,
1146
+ // serializes here; see lockfor.
1147
+ std::lock_guard<std::recursive_mutex> guard(lockfor(file_));
1148
+
1149
+ minivaultfile::Vault file = read();
1150
+ rootof("revoking a key");
1151
+
1152
+ if (key == key_) fail("a key cannot revoke itself: " + key);
1153
+
1154
+ bool found = false;
1155
+ std::vector<KeyRecord> kept;
1156
+
1157
+ for (KeyRecord& record : file.keys) {
1158
+ if (key == record.id) {
1159
+ found = true;
1160
+ continue;
1161
+ }
1162
+ kept.push_back(std::move(record));
1163
+ }
1164
+
1165
+ if (!found) fail("no such key: " + key);
1166
+
1167
+ file.keys = std::move(kept);
1168
+
1169
+ save(file);
1170
+ }
1171
+
1172
+ void MiniVault::rotate() {
1173
+ // Every write on this file, from any handle in this process,
1174
+ // serializes here; see lockfor.
1175
+ std::lock_guard<std::recursive_mutex> guard(lockfor(file_));
1176
+
1177
+ const minivaultfile::Vault file = read();
1178
+ const std::vector<uint8_t> oldroot = rootof("rotating the vault");
1179
+
1180
+ uint32_t iters = 0;
1181
+ for (const KeyRecord& record : file.keys) {
1182
+ if (key_ == record.id) iters = record.iters;
1183
+ }
1184
+
1185
+ // Read everything out under the old root before anything changes: once
1186
+ // the root is replaced the old derived keys are unreachable.
1187
+ const std::vector<uint8_t> oldnamekey = mac(oldroot, LABEL_NAMES);
1188
+ std::vector<std::pair<std::string, std::string>> held;
1189
+
1190
+ for (const EntryRecord& entry : file.entries) {
1191
+ const std::string name =
1192
+ textof(unseal(oldnamekey, entry.name, AAD_NAME, "a secret name is damaged"));
1193
+ const std::string value =
1194
+ textof(unseal(secretkey(oldroot, name), entry.value, std::string(AAD_SECRET) + name,
1195
+ "the value of " + name + " is damaged"));
1196
+ held.emplace_back(name, value);
1197
+ }
1198
+
1199
+ const std::vector<uint8_t> root = randombytes(KEYLEN);
1200
+ const std::vector<uint8_t> namekey = mac(root, LABEL_NAMES);
1201
+
1202
+ minivaultfile::Vault made;
1203
+
1204
+ for (const auto& secret : held) {
1205
+ const std::vector<uint8_t> key = secretkey(root, secret.first);
1206
+
1207
+ EntryRecord entry;
1208
+ entry.id = entryid(key);
1209
+ entry.name = seal(namekey, bytesof(secret.first), AAD_NAME);
1210
+ entry.value = seal(key, bytesof(secret.second), std::string(AAD_SECRET) + secret.first);
1211
+ made.entries.push_back(std::move(entry));
1212
+ }
1213
+
1214
+ made.keys.push_back(masterkey(root, key_, passphrase_, iters));
1215
+
1216
+ // SAVE FIRST, adopt second. A handle holding the new root over a file
1217
+ // that still holds the old one reads nothing and says the vault is
1218
+ // damaged, which is the wrong story about a failed write.
1219
+ save(made);
1220
+
1221
+ // Dropped rather than replaced: the next call re-derives from the file
1222
+ // this one just wrote, which is the same rule every other change
1223
+ // follows.
1224
+ close();
1225
+ }
1226
+
1227
+ // --- opening and creating --------------------------------------------
1228
+
1229
+ std::shared_ptr<MiniVault> openvault(const VaultOptions& options) {
1230
+ if (options.file.empty()) fail("a vault needs a file");
1231
+ if (options.passphrase.empty()) fail("a vault needs a passphrase");
1232
+
1233
+ const std::string key = options.key.empty() ? VAULT_MASTERKEY : options.key;
1234
+ checkid(key, "a vault needs a key id");
1235
+
1236
+ return std::make_shared<MiniVault>(options.file, key, options.passphrase,
1237
+ 0 < options.iterations ? options.iterations
1238
+ : VAULT_ITERATIONS,
1239
+ options.create);
1240
+ }
1241
+
1242
+ std::shared_ptr<MiniVault> createvault(const VaultOptions& options) {
1243
+ std::shared_ptr<MiniVault> vault = openvault(options);
1244
+
1245
+ // No stat first: the check and the write would be two steps, and
1246
+ // `putnew` refuses an existing file in ONE, which is what makes two
1247
+ // processes racing to create a vault leave one vault.
1248
+ VaultOptions made = options;
1249
+ made.key = vault->key();
1250
+
1251
+ const std::vector<uint8_t> root = randombytes(KEYLEN);
1252
+ minivaultfile::Vault file;
1253
+ file.keys.push_back(masterkey(root, vault->key(), options.passphrase,
1254
+ static_cast<uint32_t>(0 < options.iterations ? options.iterations
1255
+ : VAULT_ITERATIONS)));
1256
+
1257
+ const int why = spill(options.file, writefile(file), true);
1258
+ if (EEXIST == why) fail("vault file already exists: " + options.file);
1259
+ if (0 != why) fail("cannot write " + options.file);
1260
+
1261
+ return vault;
1262
+ }
1263
+
1264
+ // --- the definition --------------------------------------------------
1265
+
1266
+ // Written out rather than built by `providerplugin`, because this
1267
+ // definition publishes TWO exports: `provider`, the read half every kind
1268
+ // publishes, and `vault`, the programmatic API. voxgig/plugin's exports
1269
+ // are how a definition offers an application more than the host's own
1270
+ // vocabulary, and a store that can only be read is half a vault.
1271
+ //
1272
+ // The `sekreto_error` wrapping is what `providerplugin` would have done:
1273
+ // plugin wraps a code-less error raised in `define` as
1274
+ // `plugin_define_failed` and keeps one that already carries a code, so a
1275
+ // refusal of this provider's own configuration travels under
1276
+ // `sekreto_error` and comes back out of the host as itself.
1277
+ Definition minivault() {
1278
+ auto def = std::make_shared<plugin::Definition>();
1279
+
1280
+ def->name = "minivault";
1281
+ def->define = [](plugin::Inst& inst) {
1282
+ std::shared_ptr<MiniVault> vault;
1283
+
1284
+ try {
1285
+ const ProviderSpec spec = specof(inst.options());
1286
+
1287
+ VaultOptions options;
1288
+ options.file = spec.file;
1289
+ options.key = spec.vaultkey;
1290
+ options.passphrase = spec.passphrase;
1291
+ options.iterations = spec.iterations.value_or(0);
1292
+ options.create = spec.create;
1293
+
1294
+ // Configuration is refused HERE, so a mistyped chain fails at
1295
+ // construction. Reaching the file is not configuration: the handle
1296
+ // is lazy, and nothing is read or stretched until a lookup.
1297
+ vault = openvault(options);
1298
+ } catch (const SekretoError& err) {
1299
+ plugin::fail(ERROR_CODE, err.what(),
1300
+ plugin::details2("ref", plugin::vstr(inst.ref()), "cause",
1301
+ plugin::vstr(err.what())));
1302
+ }
1303
+
1304
+ inst.exportvalue(PROVIDER_EXPORT,
1305
+ plugin::vnum(providerslot(std::make_shared<MiniVaultProvider>(vault))));
1306
+ inst.exportvalue(VAULT_EXPORT, plugin::vnum(parkvault(vault)));
1307
+ };
1308
+
1309
+ return def;
1310
+ }
1311
+
1312
+ std::shared_ptr<MiniVault> vaultof(const Sekreto& secrets, const std::string& store) {
1313
+ if (store.empty()) {
1314
+ const plugin::V ticket =
1315
+ secrets.host().exports(std::string("minivault/") + VAULT_EXPORT);
1316
+ std::shared_ptr<MiniVault> vault =
1317
+ plugin::isnum(ticket) ? vaultat(plugin::asnum(ticket)) : nullptr;
1318
+
1319
+ if (nullptr == vault) fail("no minivault store in this chain");
1320
+
1321
+ return vault;
1322
+ }
1323
+
1324
+ // A NAMED STORE MUST EXIST, and the alias must not stand in for it.
1325
+ // `host.exports` falls back to the alias when the exact ref misses, so
1326
+ // asking for `minivault` in a chain whose only vault is named `app`
1327
+ // used to hand back the `app` vault - and then write to it. Naming a
1328
+ // store that is not there throws, which is the rule the whole library
1329
+ // follows: `tryget` already means "may not have it", so it cannot also
1330
+ // mean "may not exist".
1331
+ const std::string missing = "no minivault store named " + store + " in this chain";
1332
+ const std::string ref = "minivault" == store ? "minivault" : "minivault$" + store;
1333
+
1334
+ if (nullptr == secrets.host().instance(ref)) fail(missing);
1335
+
1336
+ const plugin::V ticket = secrets.host().exports(ref + "/" + VAULT_EXPORT);
1337
+ std::shared_ptr<MiniVault> vault =
1338
+ plugin::isnum(ticket) ? vaultat(plugin::asnum(ticket)) : nullptr;
1339
+
1340
+ if (nullptr == vault) fail(missing);
1341
+
1342
+ return vault;
1343
+ }
1344
+
1345
+ } // namespace sekreto