@voxgig/sdkgen 4.8.2 → 4.8.3

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 (376) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  33. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  34. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  35. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  36. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  37. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  38. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  39. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  40. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  41. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  45. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  46. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  47. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  48. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  49. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  50. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  51. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  52. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  53. package/project/.sdk/tm/c/Makefile +38 -3
  54. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  55. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  56. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  57. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  58. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  59. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  60. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  61. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  62. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  63. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  64. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  65. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  66. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  67. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  68. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  69. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  70. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  71. package/project/.sdk/tm/cpp/Makefile +5 -1
  72. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  73. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  74. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  75. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  76. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  77. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  78. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  79. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  80. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  81. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  82. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  83. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  84. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  85. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  86. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  87. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  88. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  89. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  90. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  91. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  92. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  93. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  94. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  95. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  96. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  97. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  98. package/project/.sdk/tm/elixir/Makefile +11 -3
  99. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  100. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  101. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  102. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  103. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  104. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  105. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  106. package/project/.sdk/tm/go/core/context.go +32 -16
  107. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  108. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  109. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  110. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  111. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  112. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  113. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  133. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  134. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
  135. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
  136. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  137. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  138. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  139. package/project/.sdk/tm/go/test/omni/omni.go +897 -0
  140. package/project/.sdk/tm/go/test/omni/util.go +360 -0
  141. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  142. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  143. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  144. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  145. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  146. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  147. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  148. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  149. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  150. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  151. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  152. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  153. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  154. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  155. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  156. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  157. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  158. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  159. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  160. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  161. package/project/.sdk/tm/js/test/omni.js +251 -0
  162. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  163. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  164. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  165. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  166. package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
  167. package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
  168. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  169. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  170. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  171. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  172. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  173. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  174. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  175. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  176. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  177. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  178. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  179. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  180. package/project/.sdk/tm/lean/Makefile +12 -5
  181. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  182. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  183. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  184. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  185. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  186. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  187. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  188. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  189. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  190. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  191. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  192. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  193. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  194. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  195. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  196. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  197. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  198. package/project/.sdk/tm/ocaml/Makefile +37 -12
  199. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  200. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  201. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  202. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  203. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  204. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  205. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  206. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  207. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  208. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  209. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  210. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  211. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  212. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  213. package/project/.sdk/tm/php/test/Omni.php +691 -0
  214. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  215. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  216. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  217. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  218. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  219. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  220. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  221. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  222. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  223. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  224. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  225. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  226. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  227. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  253. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  254. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  255. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  256. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  257. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  258. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  259. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  260. package/project/.sdk/tm/py/test/omni.py +415 -0
  261. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  262. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  263. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  264. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  265. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
  266. package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
  267. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  268. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  269. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  270. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  271. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  272. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  273. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  274. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  275. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  276. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  277. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  278. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  279. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  280. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  281. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  282. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  283. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  284. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  285. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  286. package/project/.sdk/tm/scala/Makefile +16 -6
  287. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  288. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  289. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  290. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  291. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  292. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  293. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  294. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  295. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  296. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  297. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  298. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  299. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  300. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  301. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  302. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  303. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  304. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  305. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  306. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  307. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  308. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  309. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  310. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  311. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  312. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  313. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  326. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  327. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  328. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  329. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  330. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  345. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  346. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  347. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  348. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  349. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  350. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  351. package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
  352. package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
  353. package/project/sdkgen-package.json +1 -1
  354. package/src/action/doctor.ts +66 -2
  355. package/src/helpers/naming.ts +4 -2
  356. package/project/.sdk/tm/c/tests/runner.h +0 -274
  357. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  358. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  359. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  360. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  361. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  362. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  363. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  364. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  365. package/project/.sdk/tm/js/test/runner.js +0 -387
  366. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  367. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  368. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  369. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  370. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  371. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  372. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  373. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  374. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  375. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  376. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
@@ -0,0 +1,184 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/boru/boru.go)
2
+ // Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The boru plugin: a boru vault through its CLI, or over `boru vault
5
+ // serve`. Needs a child process, or HTTPS in wire mode. A port of
6
+ // typescript/plugins/boru.ts.
7
+ package boru
8
+
9
+ import (
10
+ "bytes"
11
+ "errors"
12
+ "net/http"
13
+ "os"
14
+ "os/exec"
15
+ "strconv"
16
+ "strings"
17
+
18
+ "GOMODULE/feature/secrets/plugins/httpjson"
19
+ "GOMODULE/feature/secrets/sekreto"
20
+ )
21
+
22
+ // Provider reads a boru vault (https://github.com/boru-lang/boru).
23
+ //
24
+ // Two ways in, both boru's own.
25
+ //
26
+ // With no Addr, the CLI: `boru vault get --reveal <alias>` prints the
27
+ // secret on stdout, and nothing else. The passphrase is read by boru itself
28
+ // from BORU_VAULT_PASSPHRASE; sekreto never accepts it as config and never
29
+ // puts it on a command line, where it would show up in the process table.
30
+ //
31
+ // With an Addr, boru's wire protocol: `boru vault serve` publishes a
32
+ // read-only, HashiCorp-shaped provision API (boru's
33
+ // design/VAULT-WIRE-PROTOCOL.0.md), authenticated by a capability token
34
+ // from `boru vault grant`. A sekreto name is already a valid boru alias,
35
+ // and boru aliases keep their dots, so api.token is the single path segment
36
+ // api.token - not the api/token split a HashiCorp KV gets. The value is the
37
+ // `value` field. A 404 is a miss; anything else the server refuses (a
38
+ // revoked capability, a sealed vault) is an error.
39
+ //
40
+ // boru's `vault proxy` and `vault mcp` remain out of bounds: they are a
41
+ // credential *broker*, built precisely so the caller never receives the
42
+ // credential. `vault serve` is the provision endpoint, built to hand the
43
+ // value back - that is the one sekreto uses.
44
+ type Provider struct {
45
+ Command string
46
+ Namespace string
47
+ Home string
48
+ Addr string
49
+ Token string
50
+ Mount string
51
+ }
52
+
53
+ func (provider *Provider) command() string {
54
+ if "" == provider.Command {
55
+ return "boru"
56
+ }
57
+ return provider.Command
58
+ }
59
+
60
+ func (provider *Provider) wireaddr() string {
61
+ return strings.TrimSuffix(provider.Addr, "/")
62
+ }
63
+
64
+ func (provider *Provider) wiremount() string {
65
+ if "" == provider.Mount {
66
+ return "secret"
67
+ }
68
+ return provider.Mount
69
+ }
70
+
71
+ func (provider *Provider) wirelookup(name string) (string, bool, error) {
72
+ addr := provider.wireaddr()
73
+ if err := sekreto.CheckAddr(addr); nil != err {
74
+ return "", false, err
75
+ }
76
+
77
+ // The dotted name stays one segment: boru aliases keep their dots.
78
+ alias := name
79
+ if "" != provider.Namespace {
80
+ alias = provider.Namespace + "/" + name
81
+ }
82
+ target := addr + "/v1/" + provider.wiremount() + "/data/" + alias
83
+
84
+ status, body, err := httpjson.Get(target, map[string]string{"X-Vault-Token": provider.Token})
85
+ if nil != err {
86
+ return "", false, err
87
+ }
88
+
89
+ if http.StatusNotFound == status {
90
+ return "", false, nil
91
+ }
92
+
93
+ if http.StatusOK != status {
94
+ return "", false, sekreto.Fail("sekreto: boru serve error: " + strconv.Itoa(status) + ": " + target)
95
+ }
96
+
97
+ value := httpjson.Dig(body, "data", "data", "value")
98
+ if nil == value {
99
+ return "", false, nil
100
+ }
101
+
102
+ return httpjson.ToString(value), true, nil
103
+ }
104
+
105
+ func (provider *Provider) Lookup(name string) (string, bool, error) {
106
+ if err := sekreto.CheckName(name); nil != err {
107
+ return "", false, err
108
+ }
109
+
110
+ if "" != provider.Addr {
111
+ return provider.wirelookup(name)
112
+ }
113
+
114
+ alias := name
115
+ if "" != provider.Namespace {
116
+ alias = provider.Namespace + ":" + name
117
+ }
118
+
119
+ run := exec.Command(provider.command(), "vault", "get", "--reveal", alias)
120
+
121
+ if "" != provider.Home {
122
+ run.Env = append(os.Environ(), "BORU_HOME="+provider.Home)
123
+ }
124
+
125
+ var out, errout bytes.Buffer
126
+ run.Stdout = &out
127
+ run.Stderr = &errout
128
+
129
+ err := run.Run()
130
+
131
+ if nil == err {
132
+ // boru prints the value and one newline, and nothing else.
133
+ return strings.TrimSuffix(out.String(), "\n"), true, nil
134
+ }
135
+
136
+ var exiterr *exec.ExitError
137
+ if !errors.As(err, &exiterr) {
138
+ return "", false, sekreto.Fail("sekreto: cannot run " + provider.command() + ": " + err.Error())
139
+ }
140
+
141
+ why := strings.TrimSpace(errout.String())
142
+
143
+ // "no alias named" is boru saying it does not hold this secret, which is a
144
+ // miss: the chain carries on to the next provider. A locked vault or a
145
+ // wrong passphrase is not a miss - treating it as one would fall through
146
+ // to a weaker store without saying so.
147
+ if borumiss(why) {
148
+ return "", false, nil
149
+ }
150
+
151
+ if "" == why {
152
+ why = "exit " + strconv.Itoa(exiterr.ExitCode())
153
+ }
154
+
155
+ return "", false, sekreto.Fail("sekreto: boru vault error: " + why)
156
+ }
157
+
158
+ func (provider *Provider) Describe() string {
159
+ if "" != provider.Addr {
160
+ return "boru:" + provider.wireaddr()
161
+ }
162
+ if "" != provider.Namespace {
163
+ return "boru:" + provider.Namespace
164
+ }
165
+ return "boru"
166
+ }
167
+
168
+ // borumiss reports whether a boru failure means "no such secret" rather than
169
+ // "I could not answer". Matched on boru's own wording for a missing alias.
170
+ func borumiss(why string) bool {
171
+ return strings.Contains(why, "no alias named")
172
+ }
173
+
174
+ // Plugin is the `boru` provider kind, as a voxgig/plugin definition.
175
+ var Plugin = sekreto.ProviderPlugin("boru", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
176
+ return &Provider{
177
+ Command: spec.Command,
178
+ Namespace: spec.Namespace,
179
+ Home: spec.Home,
180
+ Addr: spec.Addr,
181
+ Token: spec.Token,
182
+ Mount: spec.Mount,
183
+ }, nil
184
+ })
@@ -0,0 +1,114 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/doppler/doppler.go)
2
+ // Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The doppler plugin: Doppler, one bulk download per config. Needs
5
+ // HTTPS. A port of typescript/plugins/doppler.ts.
6
+ package doppler
7
+
8
+ import (
9
+ "net/http"
10
+ "strconv"
11
+ "strings"
12
+ "sync"
13
+
14
+ "GOMODULE/feature/secrets/plugins/httpjson"
15
+ "GOMODULE/feature/secrets/sekreto"
16
+ )
17
+
18
+ // Provider reads Doppler.
19
+ //
20
+ // The whole config is downloaded once - Doppler's own bulk endpoint - and
21
+ // answered from memory, like a remote .env: api.token is the API_TOKEN
22
+ // entry. A service token is config-scoped, so project and config are only
23
+ // needed with broader tokens.
24
+ type Provider struct {
25
+ Token string
26
+ Project string
27
+ Config string
28
+ Addr string
29
+ // Guards the memoised state below: a Sekreto may resolve from several
30
+ // goroutines, and a racy map read is either a crash or a zero value - a
31
+ // MISS where the store does hold the secret, which falls through to a
32
+ // weaker store.
33
+ mu sync.Mutex
34
+ values map[string]string
35
+ }
36
+
37
+ func (provider *Provider) load() (map[string]string, error) {
38
+ provider.mu.Lock()
39
+ defer provider.mu.Unlock()
40
+
41
+ if nil != provider.values {
42
+ return provider.values, nil
43
+ }
44
+
45
+ addr := provider.Addr
46
+ if "" == addr {
47
+ addr = "https://api.doppler.com"
48
+ }
49
+ addr = strings.TrimSuffix(addr, "/")
50
+ if err := sekreto.CheckAddr(addr); nil != err {
51
+ return nil, err
52
+ }
53
+
54
+ target := addr + "/v3/configs/config/secrets/download?format=json"
55
+ if "" != provider.Project {
56
+ target += "&project=" + httpjson.Escape(provider.Project)
57
+ }
58
+ if "" != provider.Config {
59
+ target += "&config=" + httpjson.Escape(provider.Config)
60
+ }
61
+
62
+ status, body, err := httpjson.Get(target,
63
+ map[string]string{"authorization": "Bearer " + provider.Token})
64
+ if nil != err {
65
+ return nil, err
66
+ }
67
+
68
+ object, is := body.(map[string]any)
69
+ if http.StatusOK != status || !is {
70
+ return nil, sekreto.Fail("sekreto: doppler error: " + strconv.Itoa(status))
71
+ }
72
+
73
+ values := map[string]string{}
74
+ for key, value := range object {
75
+ if nil != value {
76
+ values[key] = httpjson.ToString(value)
77
+ }
78
+ }
79
+ provider.values = values
80
+
81
+ return values, nil
82
+ }
83
+
84
+ func (provider *Provider) Lookup(name string) (string, bool, error) {
85
+ key, err := sekreto.EnvKey(name, "")
86
+ if nil != err {
87
+ return "", false, err
88
+ }
89
+
90
+ values, err := provider.load()
91
+ if nil != err {
92
+ return "", false, err
93
+ }
94
+
95
+ value, has := values[key]
96
+ return value, has, nil
97
+ }
98
+
99
+ func (provider *Provider) Describe() string {
100
+ if "" != provider.Project {
101
+ return "doppler:" + provider.Project + "/" + provider.Config
102
+ }
103
+ return "doppler"
104
+ }
105
+
106
+ // Plugin is the `doppler` provider kind, as a voxgig/plugin definition.
107
+ var Plugin = sekreto.ProviderPlugin("doppler", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
108
+ return &Provider{
109
+ Token: spec.Token,
110
+ Project: spec.Project,
111
+ Config: spec.Config,
112
+ Addr: spec.Addr,
113
+ }, nil
114
+ })
@@ -0,0 +1,156 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/gcpsecrets/gcpsecrets.go)
2
+ // Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The gcpsecrets plugin: GCP Secret Manager. Needs HTTPS. A port of
5
+ // typescript/plugins/gcpsecrets.ts.
6
+ package gcpsecrets
7
+
8
+ import (
9
+ "encoding/base64"
10
+ "net/http"
11
+ "os"
12
+ "strconv"
13
+ "strings"
14
+ "sync"
15
+ "time"
16
+
17
+ "GOMODULE/feature/secrets/plugins/httpjson"
18
+ "GOMODULE/feature/secrets/sekreto"
19
+ )
20
+
21
+ // Provider reads GCP Secret Manager.
22
+ //
23
+ // api.token reads secret api_token (dots flattened to `_`; Secret Manager
24
+ // ids have no hierarchy and reject dots), latest version. The token comes
25
+ // from config, then GOOGLE_OAUTH_ACCESS_TOKEN, then the GCE/GKE metadata
26
+ // server - so on Google's own platform no credential configuration is
27
+ // needed at all.
28
+ //
29
+ // The metadata call itself is plain http to a link-local host by platform
30
+ // design; no credential rides on it, so checkaddr guards the Secret
31
+ // Manager address instead.
32
+ type Provider struct {
33
+ Project string
34
+ Token string
35
+ Addr string
36
+ MetadataAddr string
37
+ // A configured token is kept forever; a metadata-server token carries
38
+ // expires_in and is renewed shortly before it runs out.
39
+ livetoken string
40
+ havetoken bool
41
+ renewat time.Time
42
+ mu sync.Mutex
43
+ }
44
+
45
+ func (provider *Provider) metadataaddr() string {
46
+ if "" != provider.MetadataAddr {
47
+ return provider.MetadataAddr
48
+ }
49
+ if host := os.Getenv("GCE_METADATA_HOST"); "" != host {
50
+ return "http://" + host
51
+ }
52
+ return "http://metadata.google.internal"
53
+ }
54
+
55
+ func (provider *Provider) login() (string, error) {
56
+ configured := provider.Token
57
+ if "" == configured {
58
+ configured = os.Getenv("GOOGLE_OAUTH_ACCESS_TOKEN")
59
+ }
60
+ if "" != configured {
61
+ return configured, nil
62
+ }
63
+
64
+ target := strings.TrimSuffix(provider.metadataaddr(), "/") +
65
+ "/computeMetadata/v1/instance/service-accounts/default/token"
66
+
67
+ status, body, err := httpjson.Get(target, map[string]string{"Metadata-Flavor": "Google"})
68
+ if nil != err {
69
+ return "", err
70
+ }
71
+
72
+ got := httpjson.DigText(body, "access_token")
73
+ if http.StatusOK != status || "" == got {
74
+ return "", sekreto.Fail("sekreto: gcp: no token and metadata server did not answer")
75
+ }
76
+
77
+ provider.renewat = httpjson.Expiry(httpjson.Dig(body, "expires_in"))
78
+
79
+ return got, nil
80
+ }
81
+
82
+ func (provider *Provider) Lookup(name string) (string, bool, error) {
83
+ // Serialize per-provider access: Lookup reads and refreshes the cached
84
+ // login token, and a secrets client may resolve from several goroutines.
85
+ provider.mu.Lock()
86
+ defer provider.mu.Unlock()
87
+
88
+ if "" == provider.Project {
89
+ return "", false, sekreto.Fail("sekreto: gcp: no project")
90
+ }
91
+
92
+ addr := provider.Addr
93
+ if "" == addr {
94
+ addr = "https://secretmanager.googleapis.com"
95
+ }
96
+ if err := sekreto.CheckAddr(addr); nil != err {
97
+ return "", false, err
98
+ }
99
+
100
+ if !provider.havetoken || httpjson.Due(provider.renewat) {
101
+ token, err := provider.login()
102
+ if nil != err {
103
+ return "", false, err
104
+ }
105
+ provider.livetoken = token
106
+ provider.havetoken = true
107
+ }
108
+
109
+ flat, err := sekreto.FlatName(name, "_")
110
+ if nil != err {
111
+ return "", false, err
112
+ }
113
+
114
+ target := strings.TrimSuffix(addr, "/") + "/v1/projects/" + provider.Project +
115
+ "/secrets/" + flat + "/versions/latest:access"
116
+
117
+ status, body, err := httpjson.Get(target,
118
+ map[string]string{"authorization": "Bearer " + provider.livetoken})
119
+ if nil != err {
120
+ return "", false, err
121
+ }
122
+
123
+ if http.StatusNotFound == status {
124
+ return "", false, nil
125
+ }
126
+
127
+ if http.StatusOK != status {
128
+ return "", false, sekreto.Fail("sekreto: gcp error: " + strconv.Itoa(status) + ": " + target)
129
+ }
130
+
131
+ data, is := httpjson.Dig(body, "payload", "data").(string)
132
+ if !is {
133
+ return "", false, nil
134
+ }
135
+
136
+ // See the aws provider: an undecodable payload is an error, not a miss.
137
+ decoded, err := base64.StdEncoding.DecodeString(data)
138
+ if nil != err {
139
+ return "", false, sekreto.Fail("sekreto: gcp: undecodable secret")
140
+ }
141
+ return string(decoded), true, nil
142
+ }
143
+
144
+ func (provider *Provider) Describe() string {
145
+ return "gcpsecrets:" + provider.Project
146
+ }
147
+
148
+ // Plugin is the `gcpsecrets` provider kind, as a voxgig/plugin definition.
149
+ var Plugin = sekreto.ProviderPlugin("gcpsecrets", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
150
+ return &Provider{
151
+ Project: spec.Project,
152
+ Token: spec.Token,
153
+ Addr: spec.Addr,
154
+ MetadataAddr: spec.MetadataAddr,
155
+ }, nil
156
+ })
@@ -0,0 +1,209 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/hashicorp/hashicorp.go)
2
+ // Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The hashicorp plugin: HashiCorp Vault, and OpenBao. Needs HTTPS, and
5
+ // the filesystem for a kubernetes service-account JWT. A port of
6
+ // typescript/plugins/hashicorp.ts.
7
+ package hashicorp
8
+
9
+ import (
10
+ "encoding/json"
11
+ "net/http"
12
+ "os"
13
+ "strconv"
14
+ "strings"
15
+ "sync"
16
+ "time"
17
+
18
+ "GOMODULE/feature/secrets/plugins/httpjson"
19
+ "GOMODULE/feature/secrets/sekreto"
20
+ )
21
+
22
+ // Provider reads HashiCorp Vault.
23
+ //
24
+ // KV v2 (the default): api.token reads {addr}/v1/{mount}/data/api and takes
25
+ // the `token` field of data.data. KV v1 (KV: 1) reads {addr}/v1/{mount}/api
26
+ // and takes the field of data. A 404 means "not here", which is a miss
27
+ // rather than an error, so a vault can sit in a chain with fallbacks.
28
+ //
29
+ // A Vault Enterprise namespace rides the X-Vault-Namespace header, on
30
+ // logins as well as reads.
31
+ //
32
+ // Instead of being handed a token, the provider can log in: Kubernetes
33
+ // auth (the pod's service-account JWT, from its conventional path) or
34
+ // AppRole. A failed login is an error, never a miss - it means this store
35
+ // could not answer at all.
36
+ type Provider struct {
37
+ Addr string
38
+ Token string
39
+ Mount string
40
+ KV int
41
+ VaultNamespace string
42
+ Auth *sekreto.AuthSpec
43
+ // The working token: a configured token is kept forever, a logged-in
44
+ // token is renewed shortly before its lease runs out - a long-running
45
+ // process must not keep presenting a token the vault already expired.
46
+ livetoken string
47
+ havetoken bool
48
+ renewat time.Time
49
+ mu sync.Mutex
50
+ }
51
+
52
+ func (provider *Provider) mount() string {
53
+ if "" == provider.Mount {
54
+ return "secret"
55
+ }
56
+ return provider.Mount
57
+ }
58
+
59
+ func (provider *Provider) baseheaders() map[string]string {
60
+ headers := map[string]string{}
61
+ if "" != provider.VaultNamespace {
62
+ headers["X-Vault-Namespace"] = provider.VaultNamespace
63
+ }
64
+ return headers
65
+ }
66
+
67
+ func (provider *Provider) login() (string, error) {
68
+ auth := provider.Auth
69
+ if nil == auth {
70
+ return "", sekreto.Fail("sekreto: hashicorp: no token and no auth method")
71
+ }
72
+
73
+ mount := auth.Mount
74
+ if "" == mount {
75
+ mount = auth.Method
76
+ }
77
+ target := strings.TrimSuffix(provider.Addr, "/") + "/v1/auth/" + mount + "/login"
78
+
79
+ var payload []byte
80
+ switch auth.Method {
81
+ case "kubernetes":
82
+ jwt := auth.Jwt
83
+ if "" == jwt {
84
+ file := auth.JwtFile
85
+ if "" == file {
86
+ file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
87
+ }
88
+ raw, err := os.ReadFile(file)
89
+ if nil != err {
90
+ return "", sekreto.Fail("sekreto: hashicorp: cannot read jwt file " + file)
91
+ }
92
+ jwt = strings.TrimSpace(string(raw))
93
+ }
94
+ payload, _ = json.Marshal(struct {
95
+ Role string `json:"role"`
96
+ Jwt string `json:"jwt"`
97
+ }{Role: auth.Role, Jwt: jwt})
98
+ case "approle":
99
+ payload, _ = json.Marshal(struct {
100
+ RoleID string `json:"role_id"`
101
+ SecretID string `json:"secret_id"`
102
+ }{RoleID: auth.RoleID, SecretID: auth.SecretID})
103
+ default:
104
+ return "", sekreto.Fail("sekreto: hashicorp: unknown auth method: " + auth.Method)
105
+ }
106
+
107
+ status, body, err := httpjson.Call(http.MethodPost, target, provider.baseheaders(), string(payload))
108
+ if nil != err {
109
+ return "", err
110
+ }
111
+
112
+ got := httpjson.DigText(body, "auth", "client_token")
113
+ if http.StatusOK != status || "" == got {
114
+ return "", sekreto.Fail("sekreto: hashicorp login failed: " + strconv.Itoa(status) + ": " + target)
115
+ }
116
+
117
+ provider.renewat = httpjson.Expiry(httpjson.Dig(body, "auth", "lease_duration"))
118
+
119
+ return got, nil
120
+ }
121
+
122
+ func (provider *Provider) Lookup(name string) (string, bool, error) {
123
+ // Serialize per-provider access: Lookup reads and refreshes the cached
124
+ // login token, and a secrets client may resolve from several goroutines.
125
+ provider.mu.Lock()
126
+ defer provider.mu.Unlock()
127
+
128
+ if err := sekreto.CheckAddr(provider.Addr); nil != err {
129
+ return "", false, err
130
+ }
131
+
132
+ if !provider.havetoken || httpjson.Due(provider.renewat) {
133
+ if "" != provider.Token {
134
+ provider.livetoken = provider.Token
135
+ } else {
136
+ token, err := provider.login()
137
+ if nil != err {
138
+ return "", false, err
139
+ }
140
+ provider.livetoken = token
141
+ }
142
+ provider.havetoken = true
143
+ }
144
+
145
+ ref, err := sekreto.NameVaultRef(name)
146
+ if nil != err {
147
+ return "", false, err
148
+ }
149
+
150
+ base := strings.TrimSuffix(provider.Addr, "/") + "/v1/" + provider.mount()
151
+ target := base + "/data/" + ref.Path
152
+ if 1 == provider.KV {
153
+ target = base + "/" + ref.Path
154
+ }
155
+
156
+ headers := provider.baseheaders()
157
+ headers["X-Vault-Token"] = provider.livetoken
158
+
159
+ status, body, err := httpjson.Get(target, headers)
160
+ if nil != err {
161
+ return "", false, err
162
+ }
163
+
164
+ if http.StatusNotFound == status {
165
+ return "", false, nil
166
+ }
167
+
168
+ if http.StatusOK != status {
169
+ return "", false, sekreto.Fail("sekreto: hashicorp error: " + strconv.Itoa(status) + ": " + target)
170
+ }
171
+
172
+ var value any
173
+ if 1 == provider.KV {
174
+ value = httpjson.Dig(body, "data", ref.Field)
175
+ } else {
176
+ value = httpjson.Dig(body, "data", "data", ref.Field)
177
+ }
178
+
179
+ if nil == value {
180
+ return "", false, nil
181
+ }
182
+
183
+ return httpjson.ToString(value), true, nil
184
+ }
185
+
186
+ func (provider *Provider) Describe() string {
187
+ return "hashicorp:" + provider.Addr + "/" + provider.mount()
188
+ }
189
+
190
+ // Plugin is the `hashicorp` provider kind, as a voxgig/plugin definition.
191
+ var Plugin = sekreto.ProviderPlugin("hashicorp", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
192
+ kv := spec.KV
193
+ if 0 == kv {
194
+ kv = 2
195
+ }
196
+ // A version typo like kv: 3 must not quietly behave as v2 and turn
197
+ // its 404s into misses; there is nothing safe to assume it meant.
198
+ if 1 != kv && 2 != kv {
199
+ return nil, sekreto.Fail("sekreto: hashicorp: unsupported kv version: " + strconv.Itoa(kv))
200
+ }
201
+ return &Provider{
202
+ Addr: spec.Addr,
203
+ Token: spec.Token,
204
+ Mount: spec.Mount,
205
+ KV: spec.KV,
206
+ VaultNamespace: spec.VaultNamespace,
207
+ Auth: spec.Auth,
208
+ }, nil
209
+ })