@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,119 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/secretspec.py)
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 secretspec plugin: SecretSpec, through its CLI. Needs a child
5
+ # process. A port of typescript/plugins/secretspec.ts.
6
+ import subprocess
7
+
8
+ from ..sekreto import SekretoError, envkey
9
+ from ..providers import Provider, providerplugin
10
+
11
+
12
+ class SecretspecProvider(Provider):
13
+ """SecretSpec (https://secretspec.dev).
14
+
15
+ SecretSpec is a declaration - a `secretspec.toml` naming the secrets a
16
+ project needs - plus a chain of its own backends to satisfy them from.
17
+ That makes it the same shape as sekreto one level down, and the reason
18
+ to support it is the same reason sekreto exists: a project that has
19
+ already declared its secrets there should not have to declare them
20
+ again here.
21
+
22
+ Read through its CLI, as boru is, because that is the interface it
23
+ offers a program in another language: `secretspec get API_TOKEN`
24
+ prints the value on stdout and nothing else. A sekreto name maps to a
25
+ SecretSpec key exactly as it maps to an environment variable -
26
+ `api.token` is `API_TOKEN` - which is the convention SecretSpec's own
27
+ examples use.
28
+
29
+ `backend` selects one of SecretSpec's backends (`--provider`, e.g.
30
+ `keyring` or `dotenv://.env`) and is called `backend` here only
31
+ because `provider` already means something else in this library.
32
+
33
+ A reason is required, not optional: SecretSpec records every read in
34
+ an audit log and refuses to read at all without one. sekreto sends
35
+ `sekreto` unless told otherwise, so the audit trail says which tool
36
+ asked.
37
+ """
38
+
39
+ def __init__(self, command=None, file=None, profile=None,
40
+ backend=None, reason=None, prefix=None):
41
+ self.command = command or 'secretspec'
42
+ self.file = file
43
+ self.profile = profile
44
+ self.backend = backend
45
+ self.reason = reason
46
+ self.prefix = prefix
47
+
48
+ def lookup(self, name):
49
+ key = envkey(name, self.prefix)
50
+
51
+ args = [self.command]
52
+ if self.file:
53
+ args += ['--file', self.file]
54
+ args += ['get', key]
55
+ if self.backend:
56
+ args += ['--provider', self.backend]
57
+ if self.profile:
58
+ args += ['--profile', self.profile]
59
+ args += ['--reason', self.reason or 'sekreto']
60
+
61
+ try:
62
+ run = subprocess.run(
63
+ args,
64
+ capture_output=True,
65
+ text=True,
66
+ # See the boru provider: an inherited stdin lets a CLI that
67
+ # prompts block forever.
68
+ stdin=subprocess.DEVNULL,
69
+ )
70
+ except OSError as err:
71
+ raise SekretoError('sekreto: cannot run ' + self.command + ': ' + str(err))
72
+
73
+ if 0 == run.returncode:
74
+ # The value and one newline, and nothing else.
75
+ return run.stdout[:-1] if run.stdout.endswith('\n') else run.stdout
76
+
77
+ why = (run.stderr or '').strip()
78
+
79
+ if secretspecmiss(why, key):
80
+ return None
81
+
82
+ raise SekretoError(
83
+ 'sekreto: secretspec error: ' + (why or 'exit ' + str(run.returncode))
84
+ )
85
+
86
+ def describe(self):
87
+ return 'secretspec' + (':' + self.backend if self.backend else '')
88
+
89
+
90
+ def secretspecmiss(why, key):
91
+ """Does this SecretSpec failure mean "no such secret" rather than "I
92
+ could not answer"?
93
+
94
+ SecretSpec says `Secret 'API_TOKEN' not found` for both a name it does
95
+ not declare and one declared with no value, and both are misses: this
96
+ store does not hold it, so the chain carries on.
97
+
98
+ MATCHED ON THE WHOLE PHRASE, NOT ON "not found". SecretSpec also says
99
+ `Provider backend 'keyring' not found`, which is a store that could
100
+ not answer at all - and reading that as a miss is the worst failure
101
+ this library has, because the chain then falls through to a weaker
102
+ store without saying so. The key is required to appear, so the two
103
+ cannot be confused."""
104
+ return ("Secret '" + key + "' not found") in why
105
+
106
+
107
+ def _make(spec):
108
+ return SecretspecProvider(
109
+ spec.get('command'),
110
+ spec.get('file'),
111
+ spec.get('profile'),
112
+ spec.get('backend'),
113
+ spec.get('reason'),
114
+ spec.get('prefix'),
115
+ )
116
+
117
+
118
+ # The plugin: the `secretspec` provider kind, as a voxgig/plugin definition.
119
+ secretspec = providerplugin('secretspec', _make)
@@ -0,0 +1,125 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/plugins/sigv4.py)
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
12
+ # yields the same signature everywhere. That is what lets the shared spec
13
+ # carry known-answer cases that all ten ports must reproduce bit-for-bit,
14
+ # and lets the integration mock recompute the signature server-side.
15
+ #
16
+ # A port of typescript/plugins/sigv4.ts, which is canonical. It lives with
17
+ # the aws plugin because it is the one place the library needs
18
+ # HMAC-SHA256, and a built-in must not.
19
+
20
+ import hashlib
21
+ import hmac as hmaclib
22
+ import re
23
+ import urllib.parse
24
+
25
+
26
+ def _sha256hex(text):
27
+ return hashlib.sha256(text.encode('utf8')).hexdigest()
28
+
29
+
30
+ def _hmac(key, text):
31
+ return hmaclib.new(key, text.encode('utf8'), hashlib.sha256).digest()
32
+
33
+
34
+ def _uriescape(text):
35
+ """RFC 3986 escaping, which is stricter than encodeURIComponent: AWS
36
+ wants `!`, `'`, `(`, `)` and `*` escaped too. Only the unreserved
37
+ characters survive, and the hex is uppercase."""
38
+ return urllib.parse.quote(text, safe='-_.~')
39
+
40
+
41
+ def _canonicalquery(query):
42
+ """The canonical query string: each pair RFC 3986-escaped, sorted by
43
+ escaped key then escaped value."""
44
+ if '' == query:
45
+ return ''
46
+
47
+ pairs = []
48
+ for pair in query.split('&'):
49
+ eq = pair.find('=')
50
+ key = pair if -1 == eq else pair[:eq]
51
+ value = '' if -1 == eq else pair[eq + 1:]
52
+ pairs.append((
53
+ _uriescape(urllib.parse.unquote(key)),
54
+ _uriescape(urllib.parse.unquote(value)),
55
+ ))
56
+
57
+ pairs.sort()
58
+
59
+ return '&'.join(key + '=' + value for key, value in pairs)
60
+
61
+
62
+ def sigv4(input):
63
+ """Sign one request. Returns the headers to attach: authorization,
64
+ x-amz-date, and x-amz-security-token when a session token was given."""
65
+ url = urllib.parse.urlsplit(input['url'])
66
+
67
+ datetime = input['datetime']
68
+ date = datetime[:8]
69
+ body = input.get('body') or ''
70
+ session = input.get('session')
71
+
72
+ # Every header that will be signed: the caller's extras, plus host and
73
+ # x-amz-date (and the session token when present), lower-cased and
74
+ # trimmed the way the canonical form requires.
75
+ # Canonical header values are trimmed AND internally collapsed -
76
+ # AWS folds sequential whitespace to one space before signing, so a
77
+ # header like "a b" must sign as "a b" or the service refuses it.
78
+ headers = {}
79
+ for key, value in (input.get('headers') or {}).items():
80
+ headers[key.lower()] = re.sub(r'\s+', ' ', str(value).strip())
81
+ headers['host'] = url.netloc
82
+ headers['x-amz-date'] = datetime
83
+ if session:
84
+ headers['x-amz-security-token'] = session
85
+
86
+ names = sorted(headers.keys())
87
+ canonicalheaders = ''.join(name + ':' + headers[name] + '\n' for name in names)
88
+ signedheaders = ';'.join(names)
89
+
90
+ canonicalrequest = '\n'.join([
91
+ input['method'].upper(),
92
+ url.path or '/',
93
+ _canonicalquery(url.query),
94
+ canonicalheaders,
95
+ signedheaders,
96
+ _sha256hex(body),
97
+ ])
98
+
99
+ scope = date + '/' + input['region'] + '/' + input['service'] + '/aws4_request'
100
+
101
+ stringtosign = '\n'.join([
102
+ 'AWS4-HMAC-SHA256',
103
+ datetime,
104
+ scope,
105
+ _sha256hex(canonicalrequest),
106
+ ])
107
+
108
+ kdate = _hmac(('AWS4' + input['secret']).encode('utf8'), date)
109
+ kregion = _hmac(kdate, input['region'])
110
+ kservice = _hmac(kregion, input['service'])
111
+ ksigning = _hmac(kservice, 'aws4_request')
112
+ signature = hmaclib.new(
113
+ ksigning, stringtosign.encode('utf8'), hashlib.sha256
114
+ ).hexdigest()
115
+
116
+ out = {
117
+ 'authorization': 'AWS4-HMAC-SHA256 Credential=' + input['keyid'] + '/' + scope
118
+ + ', SignedHeaders=' + signedheaders + ', Signature=' + signature,
119
+ 'x-amz-date': datetime,
120
+ }
121
+
122
+ if session:
123
+ out['x-amz-security-token'] = session
124
+
125
+ return out
@@ -0,0 +1,211 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/providers.py)
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
+ # What a provider is, how a provider kind becomes a voxgig/plugin
5
+ # definition - and the four BUILT-IN kinds.
6
+ #
7
+ # A provider answers one question: "do you have this secret?" It returns
8
+ # the value, or None to mean "ask the next one". Nothing else about a
9
+ # provider is visible to the caller - which is the point: an app reads
10
+ # `api.token` and never learns whether it came from the environment, a
11
+ # .env file, HashiCorp Vault or a boru vault.
12
+ #
13
+ # Two failure shapes, and they are never interchangeable. A store that
14
+ # does not hold the secret is a MISS (None) - the chain carries on. A
15
+ # store that could not answer - bad credentials, unreachable host,
16
+ # missing configuration - is an ERROR: falling through there would
17
+ # quietly reach for a weaker store.
18
+ #
19
+ # THIS MODULE IMPORTS NO urllib, NO hashlib AND NO subprocess. What makes
20
+ # a kind built in is that it needs nothing of the platform beyond reading
21
+ # a local file; every kind that opens a socket, signs a request or spawns
22
+ # a process is a plugin under plugins/, its own module, imported only by
23
+ # a program that names it (docs/design/plugin-providers.md).
24
+ #
25
+ # A port of typescript/src/provider/support.ts and
26
+ # typescript/src/provider/builtin.ts, which are canonical.
27
+
28
+ import os
29
+
30
+ from ..voxgig_plugin import PluginError
31
+
32
+ from .sekreto import SekretoError, envkey, parsedotenv
33
+
34
+
35
+ class Provider:
36
+ """A source of secrets. `lookup` returns the value or None."""
37
+
38
+ def lookup(self, name):
39
+ raise NotImplementedError
40
+
41
+ def describe(self):
42
+ raise NotImplementedError
43
+
44
+
45
+ class EnvProvider(Provider):
46
+ """Environment variables: `api.token` from `API_TOKEN`."""
47
+
48
+ def __init__(self, prefix=None, source=None):
49
+ self.prefix = prefix
50
+ self.source = source if source is not None else os.environ
51
+
52
+ def lookup(self, name):
53
+ value = self.source.get(envkey(name, self.prefix))
54
+ return None if value is None else str(value)
55
+
56
+ def describe(self):
57
+ return 'env' + (':' + self.prefix if self.prefix else '')
58
+
59
+
60
+ class DotenvProvider(Provider):
61
+ """A `.env` file, read once, keyed exactly like the environment."""
62
+
63
+ def __init__(self, file, prefix=None):
64
+ self.file = file
65
+ self.prefix = prefix
66
+ self.values = None
67
+
68
+ def load(self):
69
+ if self.values is None:
70
+ try:
71
+ with open(self.file, 'r', encoding='utf8') as handle:
72
+ self.values = parsedotenv(handle.read())
73
+ except (FileNotFoundError, NotADirectoryError):
74
+ # An absent file - or an absent directory - means "no
75
+ # secrets here", exactly like FileProvider. Anything else
76
+ # (permission denied, an unreadable mount) is a store that
77
+ # could not answer, and swallowing it would fall through to
78
+ # a weaker store.
79
+ self.values = {}
80
+ except OSError as err:
81
+ raise SekretoError(
82
+ 'sekreto: dotenv provider cannot read ' + self.file + ': ' + str(err)
83
+ )
84
+ return self.values
85
+
86
+ def lookup(self, name):
87
+ return self.load().get(envkey(name, self.prefix))
88
+
89
+ def describe(self):
90
+ return 'dotenv:' + self.file
91
+
92
+
93
+ class MemoryProvider(Provider):
94
+ """Literal values, keyed like environment variables. The spec uses this
95
+ to test chain behaviour without touching the outside world."""
96
+
97
+ def __init__(self, values, prefix=None):
98
+ self.values = values or {}
99
+ self.prefix = prefix
100
+
101
+ def lookup(self, name):
102
+ return self.values.get(envkey(name, self.prefix))
103
+
104
+ def describe(self):
105
+ return 'memory' + (':' + self.prefix if self.prefix else '')
106
+
107
+
108
+ class FileProvider(Provider):
109
+ """A directory of one-secret-per-file entries, keyed like the
110
+ environment: `api.token` reads `<dir>/API_TOKEN`.
111
+
112
+ This is the shape of a mounted Kubernetes Secret, a Docker or Swarm
113
+ secret, and a systemd credentials directory, so those all work with no
114
+ further configuration. One trailing newline is stripped - tools that
115
+ write these files disagree about it, and a newline is never part of a
116
+ secret on purpose.
117
+ """
118
+
119
+ def __init__(self, dir, prefix=None):
120
+ self.dir = dir
121
+ self.prefix = prefix
122
+
123
+ def lookup(self, name):
124
+ file = os.path.join(self.dir, envkey(name, self.prefix))
125
+
126
+ try:
127
+ with open(file, 'r', encoding='utf8') as handle:
128
+ text = handle.read()
129
+ except (FileNotFoundError, NotADirectoryError):
130
+ # An absent file - or an absent directory - means "no secrets
131
+ # here", exactly like a missing .env. Anything else (permission
132
+ # denied, an unreadable mount) is a store that could not answer.
133
+ return None
134
+ except OSError as err:
135
+ raise SekretoError(
136
+ 'sekreto: file provider cannot read ' + file + ': ' + str(err)
137
+ )
138
+
139
+ if text.endswith('\r\n'):
140
+ return text[:-2]
141
+ if text.endswith('\n'):
142
+ return text[:-1]
143
+ return text
144
+
145
+ def describe(self):
146
+ return 'file:' + self.dir
147
+
148
+
149
+ # --- providers as voxgig/plugin definitions -------------------------------
150
+
151
+ # The export key under which a provider definition publishes the provider
152
+ # it built. `Sekreto` reads `<ref>/provider` off the host.
153
+ PROVIDER_EXPORT = 'provider'
154
+
155
+ # The voxgig/plugin error code a SekretoError travels under when it is
156
+ # raised inside a definition's `define`.
157
+ #
158
+ # plugin wraps a code-less error raised by a callback as
159
+ # `plugin_define_failed`, and keeps an error that already carries a code.
160
+ # A provider that refuses its own configuration - `kv: 3`, a missing
161
+ # project - raises a SekretoError, and that message is pinned by the spec
162
+ # byte for byte, so it must come back out of the host exactly as it went
163
+ # in. `providerplugin` gives it this code on the way in; `Sekreto` turns
164
+ # it back into a SekretoError on the way out.
165
+ ERROR_CODE = 'sekreto_error'
166
+
167
+
168
+ def providerplugin(kind, make):
169
+ """A provider kind, as a voxgig/plugin definition.
170
+
171
+ This is the whole bridge between the two libraries. The definition's
172
+ `name` is the `kind` a spec names; its `define` reads the spec as
173
+ `inst.options`, builds the provider with `make`, and exports it.
174
+ Nothing runs at `activate`: a provider opens nothing until its first
175
+ lookup, so there is nothing to capture - a provider that does hold a
176
+ resource acquires it there and lets the instance scope unwind it.
177
+
178
+ Every built-in and every plugin is made this way, so a custom
179
+ provider kind is one call:
180
+
181
+ providerplugin('mystore', lambda spec: MyStore(spec.get('addr')))
182
+ """
183
+ def define(inst):
184
+ try:
185
+ provider = make(inst.options)
186
+ except SekretoError as err:
187
+ raise PluginError(ERROR_CODE, str(err), {'ref': inst.ref, 'cause': str(err)})
188
+ inst.export(PROVIDER_EXPORT, provider)
189
+
190
+ return {'name': kind, 'define': define}
191
+
192
+
193
+ # The four built-in provider kinds - the same four in every port. What
194
+ # makes a kind built in is that it needs nothing of the platform beyond
195
+ # reading a local file: no socket, no TLS, no crypto, no child process.
196
+ BUILTINS = [
197
+ providerplugin('env', lambda spec: EnvProvider(spec.get('prefix'))),
198
+ providerplugin('memory', lambda spec: MemoryProvider(spec.get('values') or {}, spec.get('prefix'))),
199
+ providerplugin('dotenv', lambda spec: DotenvProvider(spec.get('file') or '.env', spec.get('prefix'))),
200
+ providerplugin('file', lambda spec: FileProvider(spec.get('dir') or '', spec.get('prefix'))),
201
+ ]
202
+
203
+ # Every kind this library ships, built in or as a plugin, so that an
204
+ # unknown kind can be told from a plugin that was not loaded.
205
+ KINDS = {
206
+ 'builtin': ['env', 'memory', 'dotenv', 'file'],
207
+ 'plugin': [
208
+ 'hashicorp', 'boru', 'awssecrets', 'awsparams', 'gcpsecrets',
209
+ 'azuresecrets', 'onepassword', 'doppler', 'infisical', 'secretspec',
210
+ ],
211
+ }