@voxgig/sdkgen 4.8.2 → 4.9.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 (407) 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/model/target/zig.aon +9 -0
  33. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  34. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  35. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  36. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  37. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  38. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  39. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  40. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  41. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  45. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  46. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  47. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  48. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  49. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  50. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  51. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  52. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  53. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  54. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  55. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  56. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  57. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  58. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  59. package/project/.sdk/tm/c/Makefile +38 -3
  60. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  61. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  62. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  63. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  64. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  65. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  66. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  67. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  68. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  69. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  70. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  71. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  72. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  73. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  74. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  75. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  76. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  77. package/project/.sdk/tm/cpp/Makefile +5 -1
  78. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  79. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  80. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  81. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  82. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  83. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  84. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  85. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  86. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  87. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  88. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  89. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  90. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  91. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  92. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  93. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  94. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  95. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  96. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  97. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  98. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  99. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  100. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  101. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  102. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  103. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  104. package/project/.sdk/tm/elixir/Makefile +11 -3
  105. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  106. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  107. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  108. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  109. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  110. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  111. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  112. package/project/.sdk/tm/go/core/context.go +32 -16
  113. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  133. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  134. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +208 -0
  135. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  136. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +150 -0
  137. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  138. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  139. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  140. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +442 -0
  141. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +714 -0
  142. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  143. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  144. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  145. package/project/.sdk/tm/go/test/omni/omni.go +902 -0
  146. package/project/.sdk/tm/go/test/omni/util.go +381 -0
  147. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  148. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  149. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  150. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  151. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  152. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  153. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  154. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  155. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  156. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  157. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  158. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  159. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  160. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  161. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  162. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  163. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  164. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  165. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  166. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  167. package/project/.sdk/tm/js/test/omni.js +251 -0
  168. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  169. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  170. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  171. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  172. package/project/.sdk/tm/js/test/vendor/omni/runner.js +628 -0
  173. package/project/.sdk/tm/js/test/vendor/omni/util.js +229 -0
  174. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  175. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  176. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  177. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  178. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  179. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  180. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  181. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  182. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  183. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  184. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  185. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  186. package/project/.sdk/tm/lean/Makefile +12 -5
  187. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  188. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  189. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  190. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  191. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  192. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  193. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  194. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  195. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  196. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  197. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  198. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  199. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  200. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  201. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  202. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  203. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  204. package/project/.sdk/tm/ocaml/Makefile +37 -12
  205. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  206. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  207. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  208. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  209. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  210. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  211. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  212. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  213. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  214. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  215. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  216. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  217. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  218. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  219. package/project/.sdk/tm/php/test/Omni.php +691 -0
  220. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  221. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  222. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  223. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  224. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  225. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  226. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  227. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +76 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +151 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +90 -0
  253. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  254. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  255. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  256. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  257. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +475 -0
  258. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  259. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  260. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  261. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  262. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  263. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  264. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  265. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  266. package/project/.sdk/tm/py/test/omni.py +415 -0
  267. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  268. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  269. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  270. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  271. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +580 -0
  272. package/project/.sdk/tm/py/test/voxgig_omni/util.py +252 -0
  273. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  274. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  275. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  276. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  277. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  278. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  279. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  280. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  281. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  282. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  283. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  284. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  285. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  286. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  287. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  288. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  289. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  290. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  291. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  292. package/project/.sdk/tm/scala/Makefile +16 -6
  293. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  294. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  295. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  296. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  297. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  298. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  299. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  300. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  301. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  302. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  303. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  304. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  305. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  306. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  307. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  308. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  309. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  310. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  311. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  312. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  313. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  326. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  327. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  328. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  329. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  330. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  345. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  346. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  347. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  348. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  349. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  350. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  351. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  352. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  353. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  354. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  355. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  356. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  357. package/project/.sdk/tm/zig/Makefile +15 -1
  358. package/project/.sdk/tm/zig/build.zig +23 -5
  359. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  360. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  361. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  362. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  363. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  364. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  365. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  366. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  367. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  368. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  369. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  370. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  371. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  372. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  373. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  374. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  375. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  376. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  377. package/project/.sdk/tm/zig/test/primary_utility_test.zig +145 -155
  378. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  379. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  380. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  381. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  382. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  383. package/project/sdkgen-package.json +1 -1
  384. package/src/action/doctor.ts +66 -2
  385. package/src/helpers/naming.ts +4 -2
  386. package/project/.sdk/tm/c/tests/runner.h +0 -274
  387. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  388. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  389. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  390. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  391. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  392. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  393. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  394. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  395. package/project/.sdk/tm/js/test/runner.js +0 -387
  396. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  397. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  398. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  399. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  400. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  401. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  402. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  403. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  404. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  405. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  406. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
  407. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -464
@@ -0,0 +1,184 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/boru/boru.go)
2
+ // Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-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-20260907-0029-0 (go/plugins/doppler/doppler.go)
2
+ // Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-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-20260907-0029-0 (go/plugins/gcpsecrets/gcpsecrets.go)
2
+ // Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-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,208 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/hashicorp/hashicorp.go)
2
+ // Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-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
+ "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 HashiCorp Vault.
22
+ //
23
+ // KV v2 (the default): api.token reads {addr}/v1/{mount}/data/api and takes
24
+ // the `token` field of data.data. KV v1 (KV: 1) reads {addr}/v1/{mount}/api
25
+ // and takes the field of data. A 404 means "not here", which is a miss
26
+ // rather than an error, so a vault can sit in a chain with fallbacks.
27
+ //
28
+ // A Vault Enterprise namespace rides the X-Vault-Namespace header, on
29
+ // logins as well as reads.
30
+ //
31
+ // Instead of being handed a token, the provider can log in: Kubernetes
32
+ // auth (the pod's service-account JWT, from its conventional path) or
33
+ // AppRole. A failed login is an error, never a miss - it means this store
34
+ // could not answer at all.
35
+ type Provider struct {
36
+ Addr string
37
+ Token string
38
+ Mount string
39
+ KV int
40
+ VaultNamespace string
41
+ Auth *sekreto.AuthSpec
42
+ // The working token: a configured token is kept forever, a logged-in
43
+ // token is renewed shortly before its lease runs out - a long-running
44
+ // process must not keep presenting a token the vault already expired.
45
+ livetoken string
46
+ havetoken bool
47
+ renewat time.Time
48
+ mu sync.Mutex
49
+ }
50
+
51
+ func (provider *Provider) mount() string {
52
+ if "" == provider.Mount {
53
+ return "secret"
54
+ }
55
+ return provider.Mount
56
+ }
57
+
58
+ func (provider *Provider) baseheaders() map[string]string {
59
+ headers := map[string]string{}
60
+ if "" != provider.VaultNamespace {
61
+ headers["X-Vault-Namespace"] = provider.VaultNamespace
62
+ }
63
+ return headers
64
+ }
65
+
66
+ func (provider *Provider) login() (string, error) {
67
+ auth := provider.Auth
68
+ if nil == auth {
69
+ return "", sekreto.Fail("sekreto: hashicorp: no token and no auth method")
70
+ }
71
+
72
+ mount := auth.Mount
73
+ if "" == mount {
74
+ mount = auth.Method
75
+ }
76
+ target := strings.TrimSuffix(provider.Addr, "/") + "/v1/auth/" + mount + "/login"
77
+
78
+ var payload []byte
79
+ switch auth.Method {
80
+ case "kubernetes":
81
+ jwt := auth.Jwt
82
+ if "" == jwt {
83
+ file := auth.JwtFile
84
+ if "" == file {
85
+ file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
86
+ }
87
+ raw, err := os.ReadFile(file)
88
+ if nil != err {
89
+ return "", sekreto.Fail("sekreto: hashicorp: cannot read jwt file " + file)
90
+ }
91
+ jwt = strings.TrimSpace(string(raw))
92
+ }
93
+ payload, _ = sekreto.WriteJSON(struct {
94
+ Role string `json:"role"`
95
+ Jwt string `json:"jwt"`
96
+ }{Role: auth.Role, Jwt: jwt})
97
+ case "approle":
98
+ payload, _ = sekreto.WriteJSON(struct {
99
+ RoleID string `json:"role_id"`
100
+ SecretID string `json:"secret_id"`
101
+ }{RoleID: auth.RoleID, SecretID: auth.SecretID})
102
+ default:
103
+ return "", sekreto.Fail("sekreto: hashicorp: unknown auth method: " + auth.Method)
104
+ }
105
+
106
+ status, body, err := httpjson.Call(http.MethodPost, target, provider.baseheaders(), string(payload))
107
+ if nil != err {
108
+ return "", err
109
+ }
110
+
111
+ got := httpjson.DigText(body, "auth", "client_token")
112
+ if http.StatusOK != status || "" == got {
113
+ return "", sekreto.Fail("sekreto: hashicorp login failed: " + strconv.Itoa(status) + ": " + target)
114
+ }
115
+
116
+ provider.renewat = httpjson.Expiry(httpjson.Dig(body, "auth", "lease_duration"))
117
+
118
+ return got, nil
119
+ }
120
+
121
+ func (provider *Provider) Lookup(name string) (string, bool, error) {
122
+ // Serialize per-provider access: Lookup reads and refreshes the cached
123
+ // login token, and a secrets client may resolve from several goroutines.
124
+ provider.mu.Lock()
125
+ defer provider.mu.Unlock()
126
+
127
+ if err := sekreto.CheckAddr(provider.Addr); nil != err {
128
+ return "", false, err
129
+ }
130
+
131
+ if !provider.havetoken || httpjson.Due(provider.renewat) {
132
+ if "" != provider.Token {
133
+ provider.livetoken = provider.Token
134
+ } else {
135
+ token, err := provider.login()
136
+ if nil != err {
137
+ return "", false, err
138
+ }
139
+ provider.livetoken = token
140
+ }
141
+ provider.havetoken = true
142
+ }
143
+
144
+ ref, err := sekreto.NameVaultRef(name)
145
+ if nil != err {
146
+ return "", false, err
147
+ }
148
+
149
+ base := strings.TrimSuffix(provider.Addr, "/") + "/v1/" + provider.mount()
150
+ target := base + "/data/" + ref.Path
151
+ if 1 == provider.KV {
152
+ target = base + "/" + ref.Path
153
+ }
154
+
155
+ headers := provider.baseheaders()
156
+ headers["X-Vault-Token"] = provider.livetoken
157
+
158
+ status, body, err := httpjson.Get(target, headers)
159
+ if nil != err {
160
+ return "", false, err
161
+ }
162
+
163
+ if http.StatusNotFound == status {
164
+ return "", false, nil
165
+ }
166
+
167
+ if http.StatusOK != status {
168
+ return "", false, sekreto.Fail("sekreto: hashicorp error: " + strconv.Itoa(status) + ": " + target)
169
+ }
170
+
171
+ var value any
172
+ if 1 == provider.KV {
173
+ value = httpjson.Dig(body, "data", ref.Field)
174
+ } else {
175
+ value = httpjson.Dig(body, "data", "data", ref.Field)
176
+ }
177
+
178
+ if nil == value {
179
+ return "", false, nil
180
+ }
181
+
182
+ return httpjson.ToString(value), true, nil
183
+ }
184
+
185
+ func (provider *Provider) Describe() string {
186
+ return "hashicorp:" + provider.Addr + "/" + provider.mount()
187
+ }
188
+
189
+ // Plugin is the `hashicorp` provider kind, as a voxgig/plugin definition.
190
+ var Plugin = sekreto.ProviderPlugin("hashicorp", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
191
+ kv := spec.KV
192
+ if 0 == kv {
193
+ kv = 2
194
+ }
195
+ // A version typo like kv: 3 must not quietly behave as v2 and turn
196
+ // its 404s into misses; there is nothing safe to assume it meant.
197
+ if 1 != kv && 2 != kv {
198
+ return nil, sekreto.Fail("sekreto: hashicorp: unsupported kv version: " + strconv.Itoa(kv))
199
+ }
200
+ return &Provider{
201
+ Addr: spec.Addr,
202
+ Token: spec.Token,
203
+ Mount: spec.Mount,
204
+ KV: spec.KV,
205
+ VaultNamespace: spec.VaultNamespace,
206
+ Auth: spec.Auth,
207
+ }, nil
208
+ })