@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,292 @@
1
+ // VENDORED: @voxgig/sekreto sdk-20260907-0029-0 (go/plugins/aws/aws.go)
2
+ // Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The 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, _ := sekreto.WriteJSON(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, _ := sekreto.WriteJSON(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-20260907-0029-0 (go/plugins/aws/sigv4.go)
2
+ // Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // 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-20260907-0029-0 (go/plugins/azuresecrets/azuresecrets.go)
2
+ // Source: https://github.com/voxgig/sekreto @ 86ba35a646e68a311bdece43cd5689369ca62e9d [tag: sdk-20260907-0029-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The 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
+ })