@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,62 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/doppler.py)
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
+ from ..addr import checkaddr
7
+ from ..sekreto import SekretoError, envkey
8
+ from ..providers import Provider, providerplugin
9
+ from .httpjson import fetchjson, urlpart
10
+
11
+
12
+ class DopplerProvider(Provider):
13
+ """Doppler.
14
+
15
+ The whole config is downloaded once - Doppler's own bulk endpoint -
16
+ and answered from memory, like a remote .env: `api.token` is the
17
+ `API_TOKEN` entry. A service token is config-scoped, so project and
18
+ config are only needed with broader tokens.
19
+ """
20
+
21
+ def __init__(self, options=None):
22
+ self.opts = options or {}
23
+ self.values = None
24
+
25
+ def load(self):
26
+ if self.values is not None:
27
+ return self.values
28
+
29
+ addr = (self.opts.get('addr') or 'https://api.doppler.com').rstrip('/')
30
+ checkaddr(addr)
31
+
32
+ url = addr + '/v3/configs/config/secrets/download?format=json'
33
+ if self.opts.get('project'):
34
+ url += '&project=' + urlpart(self.opts['project'])
35
+ if self.opts.get('config'):
36
+ url += '&config=' + urlpart(self.opts['config'])
37
+
38
+ status, body = fetchjson(
39
+ 'GET', url, {'authorization': 'Bearer ' + (self.opts.get('token') or '')}
40
+ )
41
+
42
+ if 200 != status or not isinstance(body, dict):
43
+ raise SekretoError('sekreto: doppler error: ' + str(status))
44
+
45
+ self.values = {}
46
+ for key, value in body.items():
47
+ if value is not None:
48
+ self.values[key] = str(value)
49
+
50
+ return self.values
51
+
52
+ def lookup(self, name):
53
+ return self.load().get(envkey(name))
54
+
55
+ def describe(self):
56
+ if self.opts.get('project'):
57
+ return 'doppler:' + self.opts['project'] + '/' + (self.opts.get('config') or '')
58
+ return 'doppler'
59
+
60
+
61
+ # The plugin: the `doppler` provider kind, as a voxgig/plugin definition.
62
+ doppler = providerplugin('doppler', DopplerProvider)
@@ -0,0 +1,101 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/gcpsecrets.py)
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
+ import base64
7
+ import os
8
+ import time
9
+
10
+ from ..addr import checkaddr
11
+ from ..sekreto import SekretoError, flatname
12
+ from ..providers import Provider, providerplugin
13
+ from .httpjson import fetchjson, tonumber
14
+
15
+
16
+ class GcpsecretsProvider(Provider):
17
+ """GCP Secret Manager.
18
+
19
+ `api.token` reads secret `api_token` (dots flattened to `_`; Secret
20
+ Manager ids have no hierarchy and reject dots), latest version. The
21
+ token comes from config, then `GOOGLE_OAUTH_ACCESS_TOKEN`, then the
22
+ GCE/GKE metadata server - so on Google's own platform no credential
23
+ configuration is needed at all.
24
+
25
+ The metadata call itself is plain http to a link-local host by
26
+ platform design; no credential rides on it, so `checkaddr` guards the
27
+ Secret Manager address instead.
28
+ """
29
+
30
+ def __init__(self, options=None):
31
+ self.opts = options or {}
32
+
33
+ # A configured token is kept forever; a metadata-server token carries
34
+ # expires_in and is renewed shortly before it runs out.
35
+ self.livetoken = None
36
+ self.renewat = float('inf')
37
+
38
+ def metadataaddr(self):
39
+ if self.opts.get('metadataaddr'):
40
+ return self.opts['metadataaddr']
41
+ host = os.environ.get('GCE_METADATA_HOST')
42
+ return 'http://' + host if host else 'http://metadata.google.internal'
43
+
44
+ def login(self):
45
+ configured = self.opts.get('token') or os.environ.get('GOOGLE_OAUTH_ACCESS_TOKEN')
46
+ if configured:
47
+ return configured
48
+
49
+ url = (self.metadataaddr().rstrip('/')
50
+ + '/computeMetadata/v1/instance/service-accounts/default/token')
51
+
52
+ status, body = fetchjson('GET', url, {'Metadata-Flavor': 'Google'})
53
+
54
+ got = (body or {}).get('access_token')
55
+ if 200 != status or not got:
56
+ raise SekretoError('sekreto: gcp: no token and metadata server did not answer')
57
+
58
+ expires = tonumber((body or {}).get('expires_in'))
59
+ self.renewat = time.time() + max(expires - 60, 1) if 0 < expires else float('inf')
60
+
61
+ return str(got)
62
+
63
+ def lookup(self, name):
64
+ project = self.opts.get('project') or ''
65
+ if '' == project:
66
+ raise SekretoError('sekreto: gcp: no project')
67
+
68
+ addr = self.opts.get('addr') or 'https://secretmanager.googleapis.com'
69
+ checkaddr(addr)
70
+
71
+ if self.livetoken is None or time.time() >= self.renewat:
72
+ self.livetoken = self.login()
73
+
74
+ url = (addr.rstrip('/') + '/v1/projects/' + project + '/secrets/'
75
+ + flatname(name, '_') + '/versions/latest:access')
76
+
77
+ status, body = fetchjson('GET', url, {'authorization': 'Bearer ' + self.livetoken})
78
+
79
+ if 404 == status:
80
+ return None
81
+
82
+ if 200 != status:
83
+ raise SekretoError('sekreto: gcp error: ' + str(status) + ': ' + url)
84
+
85
+ data = ((body or {}).get('payload') or {}).get('data')
86
+ if not isinstance(data, str):
87
+ return None
88
+
89
+ # See the aws provider: validate=True, and an undecodable payload
90
+ # is an error rather than a miss.
91
+ try:
92
+ return base64.b64decode(data, validate=True).decode('utf8')
93
+ except Exception:
94
+ raise SekretoError('sekreto: gcp: undecodable secret')
95
+
96
+ def describe(self):
97
+ return 'gcpsecrets:' + (self.opts.get('project') or '')
98
+
99
+
100
+ # The plugin: the `gcpsecrets` provider kind, as a voxgig/plugin definition.
101
+ gcpsecrets = providerplugin('gcpsecrets', GcpsecretsProvider)
@@ -0,0 +1,151 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/hashicorp.py)
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
+ import time
8
+
9
+ from ..addr import checkaddr
10
+ from ..sekreto import SekretoError, vaultref, writejson
11
+ from ..providers import Provider, providerplugin
12
+ from .httpjson import fetchjson, tonumber
13
+
14
+
15
+ class HashicorpProvider(Provider):
16
+ """HashiCorp Vault.
17
+
18
+ KV v2 (the default): `api.token` reads `{addr}/v1/{mount}/data/api`
19
+ and takes the `token` field of `data.data`. KV v1 (`kv: 1`) reads
20
+ `{addr}/v1/{mount}/api` and takes the field of `data`. A 404 means
21
+ "not here" - a miss - so a vault can sit in a chain with fallbacks.
22
+
23
+ A Vault Enterprise namespace rides the X-Vault-Namespace header, on
24
+ logins as well as reads.
25
+
26
+ Instead of being handed a token, the provider can log in: Kubernetes
27
+ auth (the pod's service-account JWT, from its conventional path) or
28
+ AppRole. A failed login is an error, never a miss - it means this
29
+ store could not answer at all.
30
+ """
31
+
32
+ def __init__(self, addr, token, mount=None, kv=None, vaultnamespace=None, auth=None):
33
+ self.addr = addr
34
+ self.mount = mount or 'secret'
35
+ self.kv = kv or 2
36
+ self.vaultnamespace = vaultnamespace
37
+ self.auth = auth
38
+
39
+ # A version typo like kv: 3 must not quietly behave as v2 and turn
40
+ # its 404s into misses; there is nothing safe to assume it meant.
41
+ if 1 != self.kv and 2 != self.kv:
42
+ raise SekretoError(
43
+ 'sekreto: hashicorp: unsupported kv version: ' + str(self.kv)
44
+ )
45
+
46
+ # The working token: a configured token is kept forever, a logged-in
47
+ # token is renewed shortly before its lease runs out - a long-running
48
+ # process must not keep presenting a token the vault already expired.
49
+ self.livetoken = None if '' == token else token
50
+ self.renewat = float('inf')
51
+
52
+ def baseheaders(self):
53
+ headers = {}
54
+ if self.vaultnamespace:
55
+ headers['X-Vault-Namespace'] = self.vaultnamespace
56
+ return headers
57
+
58
+ def login(self):
59
+ auth = self.auth
60
+ if not auth:
61
+ raise SekretoError('sekreto: hashicorp: no token and no auth method')
62
+
63
+ method = auth.get('method')
64
+ mount = auth.get('mount') or method
65
+ url = self.addr.rstrip('/') + '/v1/auth/' + str(mount) + '/login'
66
+
67
+ if 'kubernetes' == method:
68
+ jwt = auth.get('jwt')
69
+ if jwt is None:
70
+ file = (
71
+ auth.get('jwtfile')
72
+ or '/var/run/secrets/kubernetes.io/serviceaccount/token'
73
+ )
74
+ try:
75
+ with open(file, 'r', encoding='utf8') as handle:
76
+ jwt = handle.read().strip()
77
+ except OSError:
78
+ raise SekretoError('sekreto: hashicorp: cannot read jwt file ' + file)
79
+ body = {'role': auth.get('role') or '', 'jwt': jwt}
80
+ elif 'approle' == method:
81
+ body = {
82
+ 'role_id': auth.get('roleid') or '',
83
+ 'secret_id': auth.get('secretid') or '',
84
+ }
85
+ else:
86
+ raise SekretoError(
87
+ 'sekreto: hashicorp: unknown auth method: ' + str(method)
88
+ )
89
+
90
+ status, resbody = fetchjson(
91
+ 'POST', url, self.baseheaders(), writejson(body)
92
+ )
93
+
94
+ got = ((resbody or {}).get('auth') or {}).get('client_token')
95
+ if 200 != status or not got:
96
+ raise SekretoError(
97
+ 'sekreto: hashicorp login failed: ' + str(status) + ': ' + url
98
+ )
99
+
100
+ lease = tonumber(((resbody or {}).get('auth') or {}).get('lease_duration'))
101
+ self.renewat = time.time() + max(lease - 60, 1) if 0 < lease else float('inf')
102
+
103
+ return str(got)
104
+
105
+ def lookup(self, name):
106
+ checkaddr(self.addr)
107
+
108
+ if self.livetoken is None or time.time() >= self.renewat:
109
+ self.livetoken = self.login()
110
+
111
+ ref = vaultref(name)
112
+ base = self.addr.rstrip('/') + '/v1/' + self.mount
113
+ url = base + '/' + ref['path'] if 1 == self.kv else base + '/data/' + ref['path']
114
+
115
+ headers = self.baseheaders()
116
+ headers['X-Vault-Token'] = self.livetoken
117
+
118
+ status, body = fetchjson('GET', url, headers)
119
+
120
+ if 404 == status:
121
+ return None
122
+
123
+ if 200 != status:
124
+ raise SekretoError('sekreto: hashicorp error: ' + str(status) + ': ' + url)
125
+
126
+ if 1 == self.kv:
127
+ data = (body or {}).get('data')
128
+ else:
129
+ data = ((body or {}).get('data') or {}).get('data')
130
+
131
+ value = data.get(ref['field']) if isinstance(data, dict) else None
132
+
133
+ return None if value is None else str(value)
134
+
135
+ def describe(self):
136
+ return 'hashicorp:' + self.addr + '/' + self.mount
137
+
138
+
139
+ def _make(spec):
140
+ return HashicorpProvider(
141
+ spec.get('addr') or '',
142
+ spec.get('token') or '',
143
+ spec.get('mount'),
144
+ spec.get('kv'),
145
+ spec.get('vaultnamespace'),
146
+ spec.get('auth'),
147
+ )
148
+
149
+
150
+ # The plugin: the `hashicorp` provider kind, as a voxgig/plugin definition.
151
+ hashicorp = providerplugin('hashicorp', _make)
@@ -0,0 +1,115 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/httpjson.py)
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 HTTP half of every plugin that speaks to a store over the wire, in
5
+ # one place and OUTSIDE the core: a chain of built-ins never imports this
6
+ # module. One JSON round-trip, bounded in time and in size, refusing
7
+ # redirects and ignoring proxies; and the small helpers every store client
8
+ # needs. A port of typescript/plugins/httpjson.ts.
9
+
10
+ import json
11
+ import urllib.error
12
+ import urllib.parse
13
+ import urllib.request
14
+
15
+ from ..sekreto import SekretoError
16
+
17
+
18
+ # How long any single vault round-trip may take before it is treated as
19
+ # unreachable, in seconds. Ports carry the same bound.
20
+ _HTTP_TIMEOUT = 10
21
+
22
+ # How much of a response body will be read before the store is treated as
23
+ # having answered incoherently. Ports carry the same bound.
24
+ #
25
+ # Far above anything real - the largest legitimate payload this library
26
+ # fetches is Doppler's whole-config download, measured in kilobytes. A bound
27
+ # is needed because the TIMEOUT is not one: ten seconds on a loopback or
28
+ # datacentre link is gigabytes, and the body is accumulated in memory before
29
+ # it is parsed. This runs on an application's startup path, so the failure is
30
+ # the application never starting.
31
+ _HTTP_MAXBODY = 8 * 1024 * 1024
32
+
33
+
34
+ class _NoRedirect(urllib.request.HTTPRedirectHandler):
35
+ """A redirect handler that refuses to follow: a vault API never
36
+ legitimately redirects, and following one would resend the vault token
37
+ to the redirect's host."""
38
+
39
+ def redirect_request(self, *args, **kwargs):
40
+ return None
41
+
42
+
43
+ # A secrets client dials the address it was configured with and nowhere
44
+ # else. urllib installs a ProxyHandler from the environment by default, and
45
+ # its proxy resolution does NOT exempt loopback - so with http_proxy set,
46
+ # `X-Vault-Token` for a local dev vault went, in the clear, to whatever that
47
+ # variable named. checkaddr permits plaintext to loopback precisely because
48
+ # nothing leaves the machine; an environment variable it cannot see must not
49
+ # be able to make that false. An empty ProxyHandler turns the whole
50
+ # mechanism off.
51
+ _opener = urllib.request.build_opener(_NoRedirect, urllib.request.ProxyHandler({}))
52
+
53
+
54
+ def fetchjson(method, url, headers, body=None):
55
+ """One JSON round-trip, returning (status, parsed-json-or-None).
56
+
57
+ A 404 is a normal answer here, not an exception: callers decide on
58
+ status. Network failure is always an error - an unreachable store is a
59
+ store that could not answer.
60
+ """
61
+ data = None if body is None else body.encode('utf8')
62
+ request = urllib.request.Request(url, data=data, headers=headers, method=method)
63
+
64
+ try:
65
+ # No redirects (a followed one carries X-Vault-Token to the target,
66
+ # which checkaddr cannot see) and a bounded wait (an accepted-but-
67
+ # silent endpoint must not hang the caller forever). A 3xx surfaces
68
+ # as an HTTPError below and is treated as a store error.
69
+ with _opener.open(request, timeout=_HTTP_TIMEOUT) as response:
70
+ status = response.status
71
+ raw = response.read(_HTTP_MAXBODY + 1)
72
+ except urllib.error.HTTPError as err:
73
+ status = err.code
74
+ raw = err.read(_HTTP_MAXBODY + 1)
75
+ except urllib.error.URLError as err:
76
+ raise SekretoError(
77
+ 'sekreto: cannot reach ' + url.split('?')[0] + ': ' + str(err.reason)
78
+ )
79
+
80
+ # One byte over the bound is enough to know it was exceeded. An endless
81
+ # body is a store that could not answer, so this raises rather than
82
+ # returning a miss - the latter would fall through to a weaker store on
83
+ # an attacker's cue.
84
+ if _HTTP_MAXBODY < len(raw):
85
+ raise SekretoError('sekreto: oversized response from ' + url.split('?')[0])
86
+
87
+ text = raw.decode('utf8', 'replace')
88
+
89
+ try:
90
+ return status, json.loads(text)
91
+ except ValueError:
92
+ # A success status promised JSON; a body that does not parse means
93
+ # the store could not answer coherently, and treating it as a miss
94
+ # would fall through to a weaker store. Error statuses may carry
95
+ # any body - they are decided on status alone.
96
+ if 200 == status:
97
+ raise SekretoError('sekreto: malformed response from ' + url.split('?')[0])
98
+ return status, None
99
+
100
+
101
+ def urlpart(text):
102
+ """One URL component, escaped the way encodeURIComponent does it -
103
+ the addresses built here must match the canonical port's byte for
104
+ byte."""
105
+ return urllib.parse.quote(str(text), safe="-_.!~*'()")
106
+
107
+
108
+ def tonumber(value):
109
+ """The canonical port's Number() as expiry fields need it: a number
110
+ or numeric string converts (expires_in may arrive as a string);
111
+ anything else becomes 0, which means "never renew"."""
112
+ try:
113
+ return float(value)
114
+ except (TypeError, ValueError):
115
+ return 0
@@ -0,0 +1,90 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/infisical.py)
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 infisical plugin: Infisical. Needs HTTPS. A port of
5
+ # typescript/plugins/infisical.ts.
6
+ import time
7
+
8
+ from ..addr import checkaddr
9
+ from ..sekreto import SekretoError, envkey, writejson
10
+ from ..providers import Provider, providerplugin
11
+ from .httpjson import fetchjson, tonumber, urlpart
12
+
13
+
14
+ class InfisicalProvider(Provider):
15
+ """Infisical.
16
+
17
+ `api.token` reads the secret keyed `API_TOKEN` (Infisical's own
18
+ convention is environment-style keys) at a secret path in one
19
+ environment of a project. Auth is a token, or a universal-auth
20
+ (machine identity) login with clientid/clientsecret.
21
+ """
22
+
23
+ def __init__(self, options=None):
24
+ self.opts = options or {}
25
+
26
+ # A configured token is kept forever; a universal-auth token carries
27
+ # expiresIn and is renewed shortly before it runs out.
28
+ self.livetoken = None
29
+ self.renewat = float('inf')
30
+
31
+ def login(self, addr):
32
+ if self.opts.get('token'):
33
+ return self.opts['token']
34
+
35
+ if not self.opts.get('clientid') or not self.opts.get('clientsecret'):
36
+ raise SekretoError('sekreto: infisical: no token and no client credentials')
37
+
38
+ status, body = fetchjson(
39
+ 'POST',
40
+ addr + '/api/v1/auth/universal-auth/login',
41
+ {'content-type': 'application/json'},
42
+ writejson(
43
+ {'clientId': self.opts['clientid'], 'clientSecret': self.opts['clientsecret']}
44
+ ),
45
+ )
46
+
47
+ got = (body or {}).get('accessToken')
48
+ if 200 != status or not got:
49
+ raise SekretoError('sekreto: infisical login failed: ' + str(status))
50
+
51
+ expires = tonumber((body or {}).get('expiresIn'))
52
+ self.renewat = time.time() + max(expires - 60, 1) if 0 < expires else float('inf')
53
+
54
+ return str(got)
55
+
56
+ def lookup(self, name):
57
+ addr = (self.opts.get('addr') or 'https://app.infisical.com').rstrip('/')
58
+ checkaddr(addr)
59
+
60
+ project = self.opts.get('project') or ''
61
+ environment = self.opts.get('environment') or ''
62
+ if '' == project or '' == environment:
63
+ raise SekretoError('sekreto: infisical: no project/environment')
64
+
65
+ if self.livetoken is None or time.time() >= self.renewat:
66
+ self.livetoken = self.login(addr)
67
+
68
+ url = (addr + '/api/v3/secrets/raw/' + envkey(name)
69
+ + '?workspaceId=' + urlpart(project)
70
+ + '&environment=' + urlpart(environment)
71
+ + '&secretPath=' + urlpart(self.opts.get('path') or '/'))
72
+
73
+ status, body = fetchjson('GET', url, {'authorization': 'Bearer ' + self.livetoken})
74
+
75
+ if 404 == status:
76
+ return None
77
+
78
+ if 200 != status:
79
+ raise SekretoError('sekreto: infisical error: ' + str(status))
80
+
81
+ value = ((body or {}).get('secret') or {}).get('secretValue')
82
+ return None if value is None else str(value)
83
+
84
+ def describe(self):
85
+ return ('infisical:' + (self.opts.get('project') or '')
86
+ + '/' + (self.opts.get('environment') or ''))
87
+
88
+
89
+ # The plugin: the `infisical` provider kind, as a voxgig/plugin definition.
90
+ infisical = providerplugin('infisical', InfisicalProvider)
@@ -0,0 +1,101 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/onepassword.py)
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 onepassword plugin: 1Password, through a Connect server. Needs
5
+ # HTTPS. A port of typescript/plugins/onepassword.ts.
6
+ from ..addr import checkaddr
7
+ from ..sekreto import SekretoError, checkname
8
+ from ..providers import Provider, providerplugin
9
+ from .httpjson import fetchjson, urlpart
10
+
11
+
12
+ class OnepasswordProvider(Provider):
13
+ """1Password, through a Connect server.
14
+
15
+ The item titled `api.token` (titles keep their dots), in the named
16
+ vault. The value is the field with purpose PASSWORD, or the field
17
+ labelled `value`. A vault that cannot be found is an error - config
18
+ names it, so its absence is a broken store, not a missing secret.
19
+ """
20
+
21
+ def __init__(self, options=None):
22
+ self.opts = options or {}
23
+ self.vaultid = None
24
+
25
+ def authheaders(self):
26
+ return {'authorization': 'Bearer ' + (self.opts.get('token') or '')}
27
+
28
+ def resolvevault(self, addr):
29
+ want = self.opts.get('vault') or ''
30
+ if '' == want:
31
+ raise SekretoError('sekreto: onepassword: no vault')
32
+
33
+ status, body = fetchjson('GET', addr + '/v1/vaults', self.authheaders())
34
+
35
+ if 200 != status or not isinstance(body, list):
36
+ raise SekretoError(
37
+ 'sekreto: onepassword error: ' + str(status) + ': listing vaults'
38
+ )
39
+
40
+ for entry in body:
41
+ if isinstance(entry, dict) and (want == entry.get('id') or want == entry.get('name')):
42
+ return str(entry.get('id'))
43
+
44
+ raise SekretoError('sekreto: onepassword: no vault named ' + want)
45
+
46
+ def lookup(self, name):
47
+ checkname(name)
48
+
49
+ addr = (self.opts.get('addr') or '').rstrip('/')
50
+ if '' == addr:
51
+ raise SekretoError('sekreto: onepassword: no addr')
52
+ checkaddr(addr)
53
+
54
+ if self.vaultid is None:
55
+ self.vaultid = self.resolvevault(addr)
56
+
57
+ filterpart = urlpart('title eq "' + name + '"')
58
+ status, found = fetchjson(
59
+ 'GET',
60
+ addr + '/v1/vaults/' + self.vaultid + '/items?filter=' + filterpart,
61
+ self.authheaders(),
62
+ )
63
+
64
+ if 200 != status or not isinstance(found, list):
65
+ raise SekretoError(
66
+ 'sekreto: onepassword error: ' + str(status) + ': finding ' + name
67
+ )
68
+
69
+ if 0 == len(found):
70
+ return None
71
+
72
+ status, item = fetchjson(
73
+ 'GET',
74
+ addr + '/v1/vaults/' + self.vaultid + '/items/' + str(found[0].get('id')),
75
+ self.authheaders(),
76
+ )
77
+
78
+ if 200 != status:
79
+ raise SekretoError(
80
+ 'sekreto: onepassword error: ' + str(status) + ': reading ' + name
81
+ )
82
+
83
+ fields = (item or {}).get('fields') or []
84
+
85
+ for field in fields:
86
+ if isinstance(field, dict) and 'PASSWORD' == field.get('purpose'):
87
+ value = field.get('value')
88
+ return None if value is None else str(value)
89
+ for field in fields:
90
+ if isinstance(field, dict) and 'value' == field.get('label'):
91
+ value = field.get('value')
92
+ return None if value is None else str(value)
93
+
94
+ return None
95
+
96
+ def describe(self):
97
+ return 'onepassword:' + (self.opts.get('vault') or '')
98
+
99
+
100
+ # The plugin: the `onepassword` provider kind, as a voxgig/plugin definition.
101
+ onepassword = providerplugin('onepassword', OnepasswordProvider)