@voxgig/sdkgen 4.8.2 → 4.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  33. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  34. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  35. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  36. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  37. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  38. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  39. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  40. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  41. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  45. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  46. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  47. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  48. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  49. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  50. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  51. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  52. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  53. package/project/.sdk/tm/c/Makefile +38 -3
  54. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  55. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  56. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  57. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  58. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  59. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  60. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  61. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  62. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  63. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  64. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  65. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  66. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  67. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  68. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  69. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  70. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  71. package/project/.sdk/tm/cpp/Makefile +5 -1
  72. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  73. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  74. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  75. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  76. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  77. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  78. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  79. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  80. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  81. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  82. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  83. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  84. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  85. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  86. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  87. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  88. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  89. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  90. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  91. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  92. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  93. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  94. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  95. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  96. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  97. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  98. package/project/.sdk/tm/elixir/Makefile +11 -3
  99. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  100. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  101. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  102. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  103. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  104. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  105. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  106. package/project/.sdk/tm/go/core/context.go +32 -16
  107. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  108. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  109. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  110. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  111. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  112. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  113. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  133. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  134. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
  135. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
  136. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  137. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  138. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  139. package/project/.sdk/tm/go/test/omni/omni.go +897 -0
  140. package/project/.sdk/tm/go/test/omni/util.go +360 -0
  141. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  142. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  143. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  144. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  145. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  146. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  147. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  148. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  149. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  150. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  151. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  152. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  153. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  154. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  155. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  156. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  157. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  158. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  159. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  160. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  161. package/project/.sdk/tm/js/test/omni.js +251 -0
  162. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  163. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  164. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  165. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  166. package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
  167. package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
  168. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  169. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  170. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  171. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  172. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  173. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  174. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  175. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  176. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  177. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  178. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  179. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  180. package/project/.sdk/tm/lean/Makefile +12 -5
  181. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  182. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  183. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  184. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  185. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  186. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  187. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  188. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  189. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  190. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  191. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  192. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  193. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  194. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  195. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  196. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  197. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  198. package/project/.sdk/tm/ocaml/Makefile +37 -12
  199. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  200. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  201. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  202. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  203. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  204. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  205. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  206. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  207. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  208. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  209. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  210. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  211. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  212. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  213. package/project/.sdk/tm/php/test/Omni.php +691 -0
  214. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  215. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  216. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  217. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  218. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  219. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  220. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  221. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  222. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  223. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  224. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  225. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  226. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  227. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  253. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  254. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  255. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  256. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  257. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  258. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  259. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  260. package/project/.sdk/tm/py/test/omni.py +415 -0
  261. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  262. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  263. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  264. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  265. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
  266. package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
  267. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  268. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  269. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  270. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  271. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  272. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  273. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  274. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  275. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  276. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  277. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  278. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  279. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  280. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  281. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  282. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  283. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  284. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  285. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  286. package/project/.sdk/tm/scala/Makefile +16 -6
  287. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  288. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  289. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  290. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  291. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  292. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  293. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  294. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  295. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  296. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  297. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  298. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  299. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  300. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  301. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  302. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  303. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  304. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  305. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  306. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  307. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  308. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  309. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  310. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  311. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  312. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  313. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  326. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  327. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  328. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  329. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  330. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  345. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  346. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  347. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  348. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  349. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  350. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  351. package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
  352. package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
  353. package/project/sdkgen-package.json +1 -1
  354. package/src/action/doctor.ts +66 -2
  355. package/src/helpers/naming.ts +4 -2
  356. package/project/.sdk/tm/c/tests/runner.h +0 -274
  357. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  358. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  359. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  360. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  361. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  362. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  363. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  364. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  365. package/project/.sdk/tm/js/test/runner.js +0 -387
  366. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  367. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  368. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  369. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  370. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  371. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  372. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  373. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  374. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  375. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  376. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
@@ -0,0 +1,292 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/aws/aws.go)
2
+ // Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The aws plugin: Secrets Manager and SSM Parameter Store, with requests
5
+ // SigV4-signed in-tree (sigv4.go, beside this file). Needs HTTPS and
6
+ // HMAC-SHA256 - the one cryptographic dependency in the library, which is
7
+ // why this is a plugin and why the core never imports crypto. A port of
8
+ // typescript/plugins/aws.ts.
9
+ package aws
10
+
11
+ import (
12
+ "encoding/base64"
13
+ "encoding/json"
14
+ "net/http"
15
+ "os"
16
+ "strconv"
17
+ "strings"
18
+ "time"
19
+
20
+ "GOMODULE/feature/secrets/plugins/httpjson"
21
+ "GOMODULE/feature/secrets/sekreto"
22
+ )
23
+
24
+ // awsnow is the YYYYMMDDTHHMMSSZ timestamp SigV4 wants, for now.
25
+ func awsnow() string {
26
+ return time.Now().UTC().Format("20060102T150405Z")
27
+ }
28
+
29
+ // awscreds is a resolved set of AWS credentials.
30
+ type awscreds struct {
31
+ region string
32
+ keyid string
33
+ secret string
34
+ session string
35
+ }
36
+
37
+ // awsauth resolves region and credentials, from config first and the
38
+ // standard AWS_* environment variables second - those are AWS's own
39
+ // convention, and a pod or CI job that has them set should just work.
40
+ // Missing either is an error: an AWS store with no credentials could not
41
+ // answer.
42
+ func awsauth(region string, keyid string, secret string, session string) (*awscreds, error) {
43
+ if "" == region {
44
+ region = os.Getenv("AWS_REGION")
45
+ }
46
+ if "" == region {
47
+ region = os.Getenv("AWS_DEFAULT_REGION")
48
+ }
49
+ if "" == keyid {
50
+ keyid = os.Getenv("AWS_ACCESS_KEY_ID")
51
+ }
52
+ if "" == secret {
53
+ secret = os.Getenv("AWS_SECRET_ACCESS_KEY")
54
+ }
55
+ if "" == session {
56
+ session = os.Getenv("AWS_SESSION_TOKEN")
57
+ }
58
+
59
+ if "" == region {
60
+ return nil, sekreto.Fail("sekreto: aws: no region (set region or AWS_REGION)")
61
+ }
62
+ if "" == keyid || "" == secret {
63
+ return nil, sekreto.Fail("sekreto: aws: no credentials (set keyid/secret or " +
64
+ "AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY)")
65
+ }
66
+
67
+ return &awscreds{region: region, keyid: keyid, secret: secret, session: session}, nil
68
+ }
69
+
70
+ // awscall makes one signed call to an AWS JSON-1.1 API.
71
+ func awscall(
72
+ region string, keyid string, secret string, session string, addr string,
73
+ service string, target string, payload string,
74
+ ) (int, any, error) {
75
+ auth, err := awsauth(region, keyid, secret, session)
76
+ if nil != err {
77
+ return 0, nil, err
78
+ }
79
+
80
+ if "" == addr {
81
+ // The China partition lives under its own suffix; every other
82
+ // commercial region is plain amazonaws.com.
83
+ suffix := ".amazonaws.com"
84
+ if strings.HasPrefix(auth.region, "cn-") {
85
+ suffix = ".amazonaws.com.cn"
86
+ }
87
+ addr = "https://" + service + "." + auth.region + suffix
88
+ }
89
+ if err := sekreto.CheckAddr(addr); nil != err {
90
+ return 0, nil, err
91
+ }
92
+
93
+ requrl := strings.TrimSuffix(addr, "/") + "/"
94
+ headers := map[string]string{
95
+ "content-type": "application/x-amz-json-1.1",
96
+ "x-amz-target": target,
97
+ }
98
+
99
+ signed, err := SigV4(&Sigv4Input{
100
+ Method: http.MethodPost,
101
+ URL: requrl,
102
+ Headers: headers,
103
+ Body: payload,
104
+ Service: service,
105
+ Region: auth.region,
106
+ KeyID: auth.keyid,
107
+ Secret: auth.secret,
108
+ Session: auth.session,
109
+ Datetime: awsnow(),
110
+ })
111
+ if nil != err {
112
+ return 0, nil, err
113
+ }
114
+
115
+ for key, value := range signed {
116
+ headers[key] = value
117
+ }
118
+
119
+ return httpjson.Call(http.MethodPost, requrl, headers, payload)
120
+ }
121
+
122
+ // awsmiss reports whether this AWS error body names one of the not-found
123
+ // types. Those are a miss; every other failure is a store that could not
124
+ // answer.
125
+ func awsmiss(body any, types []string) bool {
126
+ errtype, _ := httpjson.Dig(body, "__type").(string)
127
+
128
+ for _, name := range types {
129
+ if strings.Contains(errtype, name) {
130
+ return true
131
+ }
132
+ }
133
+
134
+ return false
135
+ }
136
+
137
+ // SecretsProvider reads AWS Secrets Manager.
138
+ //
139
+ // api.token reads the secret named `api` (the vaultref path, so
140
+ // db.pass.main reads db/pass) and takes the `token` field of its JSON
141
+ // SecretString - the AWS idiom of one JSON map per secret. A SecretString
142
+ // that is not JSON is the value itself, under the conventional field
143
+ // `value`. Requests are SigV4-signed in-tree; see sigv4.go.
144
+ type SecretsProvider struct {
145
+ Region string
146
+ KeyID string
147
+ Secret string
148
+ Session string
149
+ Addr string
150
+ }
151
+
152
+ func (provider *SecretsProvider) Lookup(name string) (string, bool, error) {
153
+ ref, err := sekreto.NameVaultRef(name)
154
+ if nil != err {
155
+ return "", false, err
156
+ }
157
+
158
+ payload, _ := json.Marshal(struct {
159
+ SecretID string `json:"SecretId"`
160
+ }{SecretID: ref.Path})
161
+
162
+ status, body, err := awscall(
163
+ provider.Region, provider.KeyID, provider.Secret, provider.Session, provider.Addr,
164
+ "secretsmanager", "secretsmanager.GetSecretValue", string(payload))
165
+ if nil != err {
166
+ return "", false, err
167
+ }
168
+
169
+ if http.StatusBadRequest == status && awsmiss(body, []string{"ResourceNotFoundException"}) {
170
+ return "", false, nil
171
+ }
172
+
173
+ if http.StatusOK != status {
174
+ return "", false, sekreto.Fail("sekreto: aws secretsmanager error: " + strconv.Itoa(status))
175
+ }
176
+
177
+ text, is := httpjson.Dig(body, "SecretString").(string)
178
+
179
+ if !is {
180
+ // A binary secret has no fields to address; only the conventional
181
+ // `value` field can mean "the bytes themselves".
182
+ bin, is := httpjson.Dig(body, "SecretBinary").(string)
183
+ if is && "value" == ref.Field {
184
+ // The error was discarded, so a corrupted payload decoded to
185
+ // whatever came before the bad byte and was returned as the
186
+ // secret. A store that answered incoherently is an error.
187
+ decoded, err := base64.StdEncoding.DecodeString(bin)
188
+ if nil != err {
189
+ return "", false, sekreto.Fail("sekreto: aws secretsmanager: undecodable secret")
190
+ }
191
+ return string(decoded), true, nil
192
+ }
193
+ return "", false, nil
194
+ }
195
+
196
+ var parsed map[string]any
197
+ if err := json.Unmarshal([]byte(text), &parsed); nil == err && nil != parsed {
198
+ value, has := parsed[ref.Field]
199
+ if !has || nil == value {
200
+ return "", false, nil
201
+ }
202
+ return httpjson.ToString(value), true, nil
203
+ }
204
+
205
+ // A plain-string secret is the whole value; it has no named fields.
206
+ if "value" == ref.Field {
207
+ return text, true, nil
208
+ }
209
+
210
+ return "", false, nil
211
+ }
212
+
213
+ // Config only, never the environment: Describe feeds the spec's sources
214
+ // group, which must answer the same everywhere.
215
+ func (provider *SecretsProvider) Describe() string {
216
+ return "awssecrets:" + provider.Region
217
+ }
218
+
219
+ // ParamsProvider reads AWS SSM Parameter Store.
220
+ //
221
+ // db.pass.main reads the parameter /db/pass/main (under an optional prefix
222
+ // path), decrypted. Parameter Store carries flat strings, so there is no
223
+ // field indirection.
224
+ type ParamsProvider struct {
225
+ Region string
226
+ KeyID string
227
+ Secret string
228
+ Session string
229
+ Addr string
230
+ Prefix string
231
+ }
232
+
233
+ func (provider *ParamsProvider) Lookup(name string) (string, bool, error) {
234
+ param, err := sekreto.AwsParam(name, provider.Prefix)
235
+ if nil != err {
236
+ return "", false, err
237
+ }
238
+
239
+ payload, _ := json.Marshal(struct {
240
+ Name string `json:"Name"`
241
+ WithDecryption bool `json:"WithDecryption"`
242
+ }{Name: param, WithDecryption: true})
243
+
244
+ status, body, err := awscall(
245
+ provider.Region, provider.KeyID, provider.Secret, provider.Session, provider.Addr,
246
+ "ssm", "AmazonSSM.GetParameter", string(payload))
247
+ if nil != err {
248
+ return "", false, err
249
+ }
250
+
251
+ if http.StatusBadRequest == status && awsmiss(body, []string{"ParameterNotFound"}) {
252
+ return "", false, nil
253
+ }
254
+
255
+ if http.StatusOK != status {
256
+ return "", false, sekreto.Fail("sekreto: aws ssm error: " + strconv.Itoa(status))
257
+ }
258
+
259
+ value := httpjson.Dig(body, "Parameter", "Value")
260
+ if nil == value {
261
+ return "", false, nil
262
+ }
263
+
264
+ return httpjson.ToString(value), true, nil
265
+ }
266
+
267
+ func (provider *ParamsProvider) Describe() string {
268
+ return "awsparams:" + provider.Region + provider.Prefix
269
+ }
270
+
271
+ // Secrets is the `awssecrets` provider kind, as a voxgig/plugin definition.
272
+ var Secrets = sekreto.ProviderPlugin("awssecrets", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
273
+ return &SecretsProvider{
274
+ Region: spec.Region,
275
+ KeyID: spec.KeyID,
276
+ Secret: spec.Secret,
277
+ Session: spec.Session,
278
+ Addr: spec.Addr,
279
+ }, nil
280
+ })
281
+
282
+ // Params is the `awsparams` provider kind, as a voxgig/plugin definition.
283
+ var Params = sekreto.ProviderPlugin("awsparams", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
284
+ return &ParamsProvider{
285
+ Region: spec.Region,
286
+ KeyID: spec.KeyID,
287
+ Secret: spec.Secret,
288
+ Session: spec.Session,
289
+ Addr: spec.Addr,
290
+ Prefix: spec.Prefix,
291
+ }, nil
292
+ })
@@ -0,0 +1,201 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/aws/sigv4.go)
2
+ // Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // AWS Signature Version 4, hand-rolled.
5
+ //
6
+ // The AWS providers need exactly one thing from the AWS SDK - request
7
+ // signing - and taking the SDK for it would break the no-dependency rule
8
+ // that keeps ten ports honest. SigV4 is a stable, published algorithm
9
+ // built from HMAC-SHA256, which the standard library already has.
10
+ //
11
+ // SigV4 is pure: the caller passes the timestamp, so the same input yields
12
+ // the same signature everywhere. That is what lets the shared spec carry
13
+ // known-answer cases that all ten ports must reproduce bit-for-bit, and
14
+ // lets the integration mock recompute the signature server-side.
15
+ //
16
+ // A port of typescript/plugins/sigv4.ts, which is canonical. It lives
17
+ // with the aws plugin because it is the one place the library needs
18
+ // HMAC-SHA256, and a built-in must not.
19
+
20
+ package aws
21
+
22
+ import (
23
+ "crypto/hmac"
24
+ "crypto/sha256"
25
+ "encoding/hex"
26
+ "net/url"
27
+ "regexp"
28
+ "sort"
29
+ "strings"
30
+
31
+ "GOMODULE/feature/secrets/plugins/httpjson"
32
+ "GOMODULE/feature/secrets/sekreto"
33
+ )
34
+
35
+ // Sigv4Input is one request to sign. The JSON tags match the shared
36
+ // spec's sigv4 group, so a spec case decodes straight into it.
37
+ type Sigv4Input struct {
38
+ Method string `json:"method"`
39
+ // URL is the full request URL; the host, path and query are signed.
40
+ URL string `json:"url"`
41
+ // Headers are extra headers to sign, e.g. content-type and
42
+ // x-amz-target.
43
+ Headers map[string]string `json:"headers"`
44
+ Body string `json:"body"`
45
+ Service string `json:"service"`
46
+ Region string `json:"region"`
47
+ KeyID string `json:"keyid"`
48
+ Secret string `json:"secret"`
49
+ // Session is the STS session token; signed as x-amz-security-token
50
+ // when present.
51
+ Session string `json:"session"`
52
+ // Datetime is the signing moment, YYYYMMDDTHHMMSSZ. Passed in, never
53
+ // sampled, so the function stays pure.
54
+ Datetime string `json:"datetime"`
55
+ }
56
+
57
+ // whitespace is one run of whitespace, collapsed to a single space in
58
+ // canonical header values.
59
+ var whitespace = regexp.MustCompile(`\s+`)
60
+
61
+ func sha256hex(text string) string {
62
+ sum := sha256.Sum256([]byte(text))
63
+ return hex.EncodeToString(sum[:])
64
+ }
65
+
66
+ func hmacsha256(key []byte, text string) []byte {
67
+ mac := hmac.New(sha256.New, key)
68
+ mac.Write([]byte(text))
69
+ return mac.Sum(nil)
70
+ }
71
+
72
+ // percentdecode undoes percent-encoding without treating `+` as a space,
73
+ // the way the canonical port's decodeURIComponent does. A malformed
74
+ // escape is left as it came - there is nothing better to sign.
75
+ func percentdecode(text string) string {
76
+ decoded, err := url.PathUnescape(text)
77
+ if nil != err {
78
+ return text
79
+ }
80
+ return decoded
81
+ }
82
+
83
+ // canonicalquery is the canonical query string: each pair RFC 3986-escaped,
84
+ // sorted by escaped key then escaped value.
85
+ func canonicalquery(query string) string {
86
+ if "" == query {
87
+ return ""
88
+ }
89
+
90
+ pairs := [][2]string{}
91
+ for _, pair := range strings.Split(query, "&") {
92
+ key := pair
93
+ value := ""
94
+ if eq := strings.Index(pair, "="); -1 != eq {
95
+ key = pair[:eq]
96
+ value = pair[eq+1:]
97
+ }
98
+ pairs = append(pairs, [2]string{
99
+ httpjson.Escape(percentdecode(key)),
100
+ httpjson.Escape(percentdecode(value)),
101
+ })
102
+ }
103
+
104
+ sort.Slice(pairs, func(left, right int) bool {
105
+ if pairs[left][0] != pairs[right][0] {
106
+ return pairs[left][0] < pairs[right][0]
107
+ }
108
+ return pairs[left][1] < pairs[right][1]
109
+ })
110
+
111
+ parts := []string{}
112
+ for _, pair := range pairs {
113
+ parts = append(parts, pair[0]+"="+pair[1])
114
+ }
115
+
116
+ return strings.Join(parts, "&")
117
+ }
118
+
119
+ // SigV4 signs one request. It returns the headers to attach: authorization,
120
+ // x-amz-date, and x-amz-security-token when a session token was given.
121
+ func SigV4(input *Sigv4Input) (map[string]string, error) {
122
+ parsed, err := url.Parse(input.URL)
123
+ if nil != err {
124
+ return nil, sekreto.Fail("sekreto: sigv4: bad url: " + input.URL)
125
+ }
126
+
127
+ date := input.Datetime
128
+ if 8 < len(date) {
129
+ date = date[:8]
130
+ }
131
+ body := input.Body
132
+
133
+ // Every header that will be signed: the caller's extras, plus host and
134
+ // x-amz-date (and the session token when present), lower-cased and
135
+ // trimmed the way the canonical form requires.
136
+ // Canonical header values are trimmed AND internally collapsed -
137
+ // AWS folds sequential whitespace to one space before signing, so a
138
+ // header like "a b" must sign as "a b" or the service refuses it.
139
+ headers := map[string]string{}
140
+ for key, value := range input.Headers {
141
+ headers[strings.ToLower(key)] = whitespace.ReplaceAllString(strings.TrimSpace(value), " ")
142
+ }
143
+ headers["host"] = parsed.Host
144
+ headers["x-amz-date"] = input.Datetime
145
+ if "" != input.Session {
146
+ headers["x-amz-security-token"] = input.Session
147
+ }
148
+
149
+ names := []string{}
150
+ for name := range headers {
151
+ names = append(names, name)
152
+ }
153
+ sort.Strings(names)
154
+
155
+ var canonicalheaders strings.Builder
156
+ for _, name := range names {
157
+ canonicalheaders.WriteString(name + ":" + headers[name] + "\n")
158
+ }
159
+ signedheaders := strings.Join(names, ";")
160
+
161
+ path := parsed.EscapedPath()
162
+ if "" == path {
163
+ path = "/"
164
+ }
165
+
166
+ canonicalrequest := strings.Join([]string{
167
+ strings.ToUpper(input.Method),
168
+ path,
169
+ canonicalquery(parsed.RawQuery),
170
+ canonicalheaders.String(),
171
+ signedheaders,
172
+ sha256hex(body),
173
+ }, "\n")
174
+
175
+ scope := date + "/" + input.Region + "/" + input.Service + "/aws4_request"
176
+
177
+ stringtosign := strings.Join([]string{
178
+ "AWS4-HMAC-SHA256",
179
+ input.Datetime,
180
+ scope,
181
+ sha256hex(canonicalrequest),
182
+ }, "\n")
183
+
184
+ kdate := hmacsha256([]byte("AWS4"+input.Secret), date)
185
+ kregion := hmacsha256(kdate, input.Region)
186
+ kservice := hmacsha256(kregion, input.Service)
187
+ ksigning := hmacsha256(kservice, "aws4_request")
188
+ signature := hex.EncodeToString(hmacsha256(ksigning, stringtosign))
189
+
190
+ out := map[string]string{
191
+ "authorization": "AWS4-HMAC-SHA256 Credential=" + input.KeyID + "/" + scope +
192
+ ", SignedHeaders=" + signedheaders + ", Signature=" + signature,
193
+ "x-amz-date": input.Datetime,
194
+ }
195
+
196
+ if "" != input.Session {
197
+ out["x-amz-security-token"] = input.Session
198
+ }
199
+
200
+ return out, nil
201
+ }
@@ -0,0 +1,187 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260904-1610-0 (go/plugins/azuresecrets/azuresecrets.go)
2
+ // Source: https://github.com/voxgig/sekreto @ a5a00db6e6d3a1ddbdef7ac62e8a75be53a9e042 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The azuresecrets plugin: Azure Key Vault. Needs HTTPS. A port of
5
+ // typescript/plugins/azuresecrets.ts.
6
+ package azuresecrets
7
+
8
+ import (
9
+ "net/http"
10
+ "strconv"
11
+ "strings"
12
+ "sync"
13
+ "time"
14
+
15
+ "GOMODULE/feature/secrets/plugins/httpjson"
16
+ "GOMODULE/feature/secrets/sekreto"
17
+ )
18
+
19
+ // azureresource is the audience Azure Key Vault tokens are scoped to.
20
+ const azureresource = "https://vault.azure.net"
21
+
22
+ // Provider reads Azure Key Vault.
23
+ //
24
+ // api.token reads secret api-token (dots flattened to `-`; Key Vault names
25
+ // allow nothing else), current version. The token comes from config, then
26
+ // a client-credentials login when tenant/clientid/clientsecret are given,
27
+ // then the IMDS managed-identity endpoint - so on Azure's own platform no
28
+ // credential configuration is needed.
29
+ //
30
+ // As with GCP, the IMDS call is plain http to a link-local host by
31
+ // platform design and carries no credential; the login and vault addresses
32
+ // are checkaddr-guarded.
33
+ type Provider struct {
34
+ Vault string
35
+ Token string
36
+ Tenant string
37
+ ClientID string
38
+ ClientSecret string
39
+ LoginAddr string
40
+ ImdsAddr string
41
+ ApiVersion string
42
+ // A configured token is kept forever; logged-in and IMDS tokens carry
43
+ // expires_in and are renewed shortly before they run out.
44
+ livetoken string
45
+ havetoken bool
46
+ renewat time.Time
47
+ mu sync.Mutex
48
+ }
49
+
50
+ func (provider *Provider) login() (string, error) {
51
+ if "" != provider.Token {
52
+ return provider.Token, nil
53
+ }
54
+
55
+ if "" != provider.Tenant && "" != provider.ClientID && "" != provider.ClientSecret {
56
+ loginaddr := provider.LoginAddr
57
+ if "" == loginaddr {
58
+ loginaddr = "https://login.microsoftonline.com"
59
+ }
60
+ if err := sekreto.CheckAddr(loginaddr); nil != err {
61
+ return "", err
62
+ }
63
+
64
+ target := strings.TrimSuffix(loginaddr, "/") + "/" + provider.Tenant +
65
+ "/oauth2/v2.0/token"
66
+ form := "grant_type=client_credentials&client_id=" + httpjson.Escape(provider.ClientID) +
67
+ "&client_secret=" + httpjson.Escape(provider.ClientSecret) +
68
+ "&scope=" + httpjson.Escape(azureresource+"/.default")
69
+
70
+ status, body, err := httpjson.Call(http.MethodPost, target,
71
+ map[string]string{"content-type": "application/x-www-form-urlencoded"}, form)
72
+ if nil != err {
73
+ return "", err
74
+ }
75
+
76
+ got := httpjson.DigText(body, "access_token")
77
+ if http.StatusOK != status || "" == got {
78
+ return "", sekreto.Fail("sekreto: azure login failed: " + strconv.Itoa(status))
79
+ }
80
+
81
+ provider.renewat = httpjson.Expiry(httpjson.Dig(body, "expires_in"))
82
+ return got, nil
83
+ }
84
+
85
+ imdsaddr := provider.ImdsAddr
86
+ if "" == imdsaddr {
87
+ imdsaddr = "http://169.254.169.254"
88
+ }
89
+ imds := strings.TrimSuffix(imdsaddr, "/") +
90
+ "/metadata/identity/oauth2/token?api-version=2018-02-01&resource=" +
91
+ httpjson.Escape(azureresource)
92
+
93
+ status, body, err := httpjson.Get(imds, map[string]string{"Metadata": "true"})
94
+ if nil != err {
95
+ return "", err
96
+ }
97
+
98
+ got := httpjson.DigText(body, "access_token")
99
+ if http.StatusOK != status || "" == got {
100
+ return "", sekreto.Fail("sekreto: azure: no token, no client credentials, and IMDS did not answer")
101
+ }
102
+
103
+ provider.renewat = httpjson.Expiry(httpjson.Dig(body, "expires_in"))
104
+ return got, nil
105
+ }
106
+
107
+ func (provider *Provider) Lookup(name string) (string, bool, error) {
108
+ // Serialize per-provider access: Lookup reads and refreshes the cached
109
+ // login token, and a secrets client may resolve from several goroutines.
110
+ provider.mu.Lock()
111
+ defer provider.mu.Unlock()
112
+
113
+ if "" == provider.Vault {
114
+ return "", false, sekreto.Fail("sekreto: azure: no vault")
115
+ }
116
+
117
+ // Only an explicit scheme is a URL; a vault NAMED httpvault must
118
+ // still become https://httpvault.vault.azure.net.
119
+ vaulturl := provider.Vault
120
+ if !strings.HasPrefix(vaulturl, "http://") && !strings.HasPrefix(vaulturl, "https://") {
121
+ vaulturl = "https://" + vaulturl + ".vault.azure.net"
122
+ }
123
+ if err := sekreto.CheckAddr(vaulturl); nil != err {
124
+ return "", false, err
125
+ }
126
+
127
+ if !provider.havetoken || httpjson.Due(provider.renewat) {
128
+ token, err := provider.login()
129
+ if nil != err {
130
+ return "", false, err
131
+ }
132
+ provider.livetoken = token
133
+ provider.havetoken = true
134
+ }
135
+
136
+ flat, err := sekreto.FlatName(name, "-")
137
+ if nil != err {
138
+ return "", false, err
139
+ }
140
+
141
+ apiversion := provider.ApiVersion
142
+ if "" == apiversion {
143
+ apiversion = "7.4"
144
+ }
145
+ target := strings.TrimSuffix(vaulturl, "/") + "/secrets/" + flat +
146
+ "?api-version=" + apiversion
147
+
148
+ status, body, err := httpjson.Get(target,
149
+ map[string]string{"authorization": "Bearer " + provider.livetoken})
150
+ if nil != err {
151
+ return "", false, err
152
+ }
153
+
154
+ if http.StatusNotFound == status {
155
+ return "", false, nil
156
+ }
157
+
158
+ if http.StatusOK != status {
159
+ return "", false, sekreto.Fail("sekreto: azure error: " + strconv.Itoa(status) + ": " +
160
+ httpjson.SafeURL(target))
161
+ }
162
+
163
+ value := httpjson.Dig(body, "value")
164
+ if nil == value {
165
+ return "", false, nil
166
+ }
167
+
168
+ return httpjson.ToString(value), true, nil
169
+ }
170
+
171
+ func (provider *Provider) Describe() string {
172
+ return "azuresecrets:" + provider.Vault
173
+ }
174
+
175
+ // Plugin is the `azuresecrets` provider kind, as a voxgig/plugin definition.
176
+ var Plugin = sekreto.ProviderPlugin("azuresecrets", func(spec *sekreto.ProviderSpec) (sekreto.Provider, error) {
177
+ return &Provider{
178
+ Vault: spec.Vault,
179
+ Token: spec.Token,
180
+ Tenant: spec.Tenant,
181
+ ClientID: spec.ClientID,
182
+ ClientSecret: spec.ClientSecret,
183
+ LoginAddr: spec.LoginAddr,
184
+ ImdsAddr: spec.ImdsAddr,
185
+ ApiVersion: spec.ApiVersion,
186
+ }, nil
187
+ })