@voxgig/sdkgen 4.8.1 → 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 +2 -2
  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,455 @@
1
+ # VENDORED: @voxgig/sekreto 0.2.0 (python/voxgig_sekreto/sekreto.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
+ # sekreto: one interface for secrets, wherever they live.
5
+ #
6
+ # A Sekreto is an ordered chain of providers. `get` asks each in turn and
7
+ # returns the first hit, so an app can be configured from environment
8
+ # variables in development and a vault in production without changing a
9
+ # line of its own code.
10
+ #
11
+ # A port of typescript/src/Sekreto.ts, which is canonical.
12
+ #
13
+ # THE CORE IMPORTS NO PROVIDER THAT OPENS A SOCKET, SPAWNS A PROCESS OR
14
+ # SIGNS A REQUEST. The four built-in kinds - env, memory, dotenv, file -
15
+ # read at most a local file; every other kind is a voxgig/plugin
16
+ # definition under plugins/, and a chain may name one only if the calling
17
+ # project handed it in through `plugins`. See
18
+ # docs/design/plugin-providers.md.
19
+
20
+ import re
21
+ import types
22
+
23
+ from ..voxgig_plugin import check_tag, format_ref, make_catalog, make_host
24
+
25
+
26
+ class SekretoError(Exception):
27
+ """Anything sekreto refuses to do: a bad name, a missing secret, a
28
+ provider that could not be reached."""
29
+
30
+
31
+ # `\z`-style anchors, not `$`. In Python, PCRE, Perl and .NET `$` also
32
+ # matches BEFORE a final newline, so `api.token\n` was accepted here while the
33
+ # canonical port rejected it - and `envkey` then produced the key
34
+ # `API_TOKEN\n`, sending this port looking for a differently named file and
35
+ # variable than the others.
36
+ NAMEPART = re.compile(r'\A[a-z0-9_]+\Z')
37
+
38
+
39
+ def validname(name):
40
+ """Is this a well-formed secret name?"""
41
+ if not isinstance(name, str) or 0 == len(name):
42
+ return False
43
+
44
+ for part in name.split('.'):
45
+ if not NAMEPART.match(part):
46
+ return False
47
+
48
+ return True
49
+
50
+
51
+ def checkname(name):
52
+ if not validname(name):
53
+ raise SekretoError('sekreto: invalid name: ' + ('' if name is None else str(name)))
54
+ return name
55
+
56
+
57
+ def envkey(name, prefix=None):
58
+ """The environment-variable key for a name: `api.token` -> `API_TOKEN`."""
59
+ checkname(name)
60
+ return (prefix or '') + '_'.join(name.split('.')).upper()
61
+
62
+
63
+ def vaultref(name):
64
+ """Where a name lives in a KV vault: `api.token` -> `api` / `token`.
65
+
66
+ A single-segment name has no path of its own, so it becomes a secret of
67
+ that name with the conventional field `value`.
68
+ """
69
+ checkname(name)
70
+
71
+ parts = name.split('.')
72
+
73
+ if 1 == len(parts):
74
+ return {'path': parts[0], 'field': 'value'}
75
+
76
+ return {'path': '/'.join(parts[:-1]), 'field': parts[-1]}
77
+
78
+
79
+ def flatname(name, sep):
80
+ """A name flattened to one segment: `api.token` -> `api_token` (GCP
81
+ Secret Manager, `_`) or `api-token` (Azure Key Vault, `-`).
82
+
83
+ Those stores have no path hierarchy and reject dots in ids, so the
84
+ dots become the store's conventional separator. With `-` as the
85
+ separator, underscores flatten too: Azure Key Vault's alphabet is
86
+ letters, digits and hyphens only, and a valid sekreto name like
87
+ `with_underscore` must still be representable there. (The resulting
88
+ `.`/`_` collision mirrors the documented envkey behaviour, where
89
+ both already map to `_`.)
90
+ """
91
+ checkname(name)
92
+ flat = sep.join(name.split('.'))
93
+ return '-'.join(flat.split('_')) if '-' == sep else flat
94
+
95
+
96
+ def awsparam(name, prefix=None):
97
+ """The AWS SSM Parameter Store name for a name: dots become the path
98
+ hierarchy, rooted at `/` (or at a prefix): `db.pass.main` ->
99
+ `/db/pass/main`, or `/app/db/pass/main` under prefix `/app`.
100
+ """
101
+ checkname(name)
102
+
103
+ base = prefix or ''
104
+ if '' != base and not base.startswith('/'):
105
+ base = '/' + base
106
+ if base.endswith('/'):
107
+ base = base[:-1]
108
+
109
+ return base + '/' + '/'.join(name.split('.'))
110
+
111
+
112
+ def parsedotenv(text):
113
+ """Parse `.env` text into a map of raw keys to values.
114
+
115
+ Deliberately small: `KEY=value`, optional `export`, `#` comments on
116
+ their own line, and single- or double-quoted values (double quotes also
117
+ unescape `\\n`, `\\r`, `\\t` and `\\\\`). A line with no `=` is skipped.
118
+ """
119
+ out = {}
120
+
121
+ if not isinstance(text, str):
122
+ return out
123
+
124
+ for rawline in text.split('\n'):
125
+ line = rawline[:-1].strip() if rawline.endswith('\r') else rawline.strip()
126
+
127
+ if 0 == len(line) or line.startswith('#'):
128
+ continue
129
+
130
+ body = line[7:].strip() if line.startswith('export ') else line
131
+
132
+ eq = body.find('=')
133
+ if 0 >= eq:
134
+ continue
135
+
136
+ key = body[:eq].strip()
137
+ value = body[eq + 1:].strip()
138
+
139
+ if 2 <= len(value) and value.startswith('"') and value.endswith('"'):
140
+ value = _unescape(value[1:-1])
141
+ elif 2 <= len(value) and value.startswith("'") and value.endswith("'"):
142
+ value = value[1:-1]
143
+
144
+ out[key] = value
145
+
146
+ return out
147
+
148
+
149
+ def _unescape(text):
150
+ out = ''
151
+ index = 0
152
+
153
+ while index < len(text):
154
+ if '\\' == text[index] and index + 1 < len(text):
155
+ nxt = text[index + 1]
156
+ index += 2
157
+ if 'n' == nxt:
158
+ out += '\n'
159
+ elif 'r' == nxt:
160
+ out += '\r'
161
+ elif 't' == nxt:
162
+ out += '\t'
163
+ elif '\\' == nxt:
164
+ out += '\\'
165
+ elif '"' == nxt:
166
+ out += '"'
167
+ else:
168
+ out += '\\' + nxt
169
+ else:
170
+ out += text[index]
171
+ index += 1
172
+
173
+ return out
174
+
175
+
176
+ def redact(text, values):
177
+ """Replace known secret values in text with `[redacted]`.
178
+
179
+ Only values of four characters or more are replaced: shorter ones are
180
+ too likely to appear in ordinary text, and redacting them would make
181
+ logs unreadable without making them safer.
182
+ """
183
+ out = text if isinstance(text, str) else ''
184
+
185
+ usable = [
186
+ value for value in (values or [])
187
+ if isinstance(value, str) and 4 <= len(value)
188
+ ]
189
+
190
+ # sorted() returns a new list: `values` belongs to the caller (it is
191
+ # `seen` when called through Sekreto.redact), and sorting in place
192
+ # would reorder it.
193
+ for value in sorted(usable, key=len, reverse=True):
194
+ out = '[redacted]'.join(out.split(value))
195
+
196
+ return out
197
+
198
+
199
+ def storename(provider):
200
+ """The store name a live provider answers to.
201
+
202
+ `describe()` opens with the provider's kind - `hashicorp:...`,
203
+ `dotenv:...`, plain `env` - so the kind is the natural default, and a
204
+ custom provider gets a sensible name without implementing anything
205
+ extra. A spec'd provider's store is its `name` or its `kind`, decided
206
+ before the provider exists.
207
+ """
208
+ return provider.describe().split(':')[0]
209
+
210
+
211
+ def _definition(plugin):
212
+ """A plugin entry, checked to be a definition before the catalog sees it.
213
+
214
+ Every plugin module is named after the definition it holds, so `from
215
+ voxgig_sekreto.plugins import hashicorp` hands back the MODULE, and a
216
+ module in the catalog would fail deep inside voxgig/plugin with a
217
+ message about a definition name. Refused here instead, naming the
218
+ import that was meant.
219
+ """
220
+ if isinstance(plugin, types.ModuleType):
221
+ name = plugin.__name__.rsplit('.', 1)[-1]
222
+ raise SekretoError(
223
+ 'sekreto: not a plugin definition: the module ' + plugin.__name__
224
+ + ' - import the definition it holds: from ' + plugin.__name__
225
+ + ' import ' + name)
226
+ if not isinstance(plugin, dict):
227
+ raise SekretoError('sekreto: not a plugin definition: ' + repr(plugin))
228
+ return plugin
229
+
230
+
231
+ def _unknownkind(kind, catalog):
232
+ """The message for a kind the catalog does not hold.
233
+
234
+ A kind sekreto has never heard of is a typo; a kind that exists as a
235
+ plugin but was not passed in is the split working as designed and
236
+ telling you what to pass. Collapsing the two was the first thing that
237
+ made the split confusing to use.
238
+ """
239
+ from .providers import KINDS
240
+
241
+ message = ('sekreto: unknown provider kind: ' + str(kind)
242
+ + ' (available: ' + ', '.join(catalog.names()) + ')')
243
+ if kind in KINDS['plugin']:
244
+ message += (' - ' + str(kind)
245
+ + ' is a sekreto plugin, not built in: pass it in the plugins option')
246
+ return message
247
+
248
+
249
+ def _unwrap(err):
250
+ """A SekretoError that crossed the plugin boundary comes back out as
251
+ itself, byte for byte. Anything else is not sekreto's to rewrite."""
252
+ from .providers import ERROR_CODE
253
+
254
+ details = getattr(err, 'details', None)
255
+ if ERROR_CODE == getattr(err, 'code', None) and isinstance(details, dict) \
256
+ and isinstance(details.get('cause'), str):
257
+ return SekretoError(details['cause'])
258
+ return err
259
+
260
+
261
+ class Sekreto:
262
+ """The secrets facade: a chain of providers plus a cache.
263
+
264
+ Two ways to read. `get` is transparent - it walks the chain and takes
265
+ the first hit, and the caller never learns which store answered.
266
+ `getfrom` is directed - it names the store, and only that store is
267
+ asked.
268
+ """
269
+
270
+ def __init__(self, options=None):
271
+ from .providers import BUILTINS
272
+
273
+ opts = options or {}
274
+
275
+ # Built-ins first, then the plugins, into one catalog: a plugin
276
+ # that names a built-in kind replaces it, which is how a host
277
+ # substitutes an implementation and never an accident, because the
278
+ # four names are documented.
279
+ #
280
+ # `catalog` is the definitions this Sekreto can build; `host` is
281
+ # the voxgig/plugin host every spec'd provider is an instance of.
282
+ # Read it for introspection - `host.list()` names each store's ref
283
+ # and status - and nothing on it advances the chain.
284
+ self.catalog = make_catalog(BUILTINS + [_definition(p) for p in opts.get('plugins') or []])
285
+ self.host = make_host({'catalog': self.catalog})
286
+
287
+ # (store, provider) pairs, in chain order. A provider handed in
288
+ # live is backed by no instance; a spec'd one is an instance of
289
+ # its kind on the host.
290
+ self.entries = []
291
+ for entry in opts.get('providers') or []:
292
+ if callable(getattr(entry, 'lookup', None)):
293
+ self.entries.append((storename(entry), entry))
294
+ else:
295
+ self.entries.append(self._declare(entry))
296
+
297
+ self.docache = False is not opts.get('cache', True)
298
+
299
+ # A list, not a dict: the store a value came from stays attached,
300
+ # and redaction order does not vary between runs.
301
+ self.cache = []
302
+
303
+ # Every value ever resolved, for redact(). Kept independently of
304
+ # the read cache so that redaction still works when cache is off -
305
+ # otherwise `cache: False` would silently disable redact() and leak
306
+ # secrets to logs.
307
+ self.seen = []
308
+
309
+ def _declare(self, spec):
310
+ """One chain entry, as a plugin instance.
311
+
312
+ The instance is `kind` for a store named after its kind and
313
+ `kind$store` otherwise - `hashicorp$prod` - so `host.list()` reads
314
+ like the chain. A store name that is already taken gets a numbered
315
+ tag from the host instead, because two providers MAY share a store
316
+ name (a directed read walks both) and an instance ref may not.
317
+ """
318
+ from .providers import PROVIDER_EXPORT
319
+
320
+ kind = spec.get('kind') if isinstance(spec, dict) else None
321
+
322
+ if kind is None or not self.catalog.has(kind):
323
+ raise SekretoError(_unknownkind(kind, self.catalog))
324
+
325
+ store = spec.get('name') or kind
326
+
327
+ if not check_tag(store):
328
+ raise SekretoError('sekreto: invalid store name: ' + str(store))
329
+
330
+ ref = kind if store == kind else format_ref(kind, store)
331
+ if self.host.instance(ref) is not None:
332
+ ref = self.host.autotag(kind)
333
+
334
+ try:
335
+ # `load` runs the definition's `define`, which builds the
336
+ # provider from the spec; `activate` takes the instance live.
337
+ # Nothing is contacted by either: a provider opens nothing
338
+ # until its first lookup.
339
+ self.host.load(ref, {'options': spec})
340
+ self.host.activate(ref)
341
+ except Exception as err:
342
+ raise _unwrap(err) from None
343
+
344
+ return (store, self.host.exports(ref + '/' + PROVIDER_EXPORT))
345
+
346
+ def get(self, name):
347
+ """The secret, or a SekretoError if no provider has it."""
348
+ found = self.try_(name)
349
+
350
+ if found is None:
351
+ raise SekretoError('sekreto: unknown secret: ' + name)
352
+
353
+ return found
354
+
355
+ def try_(self, name):
356
+ """The secret, or None if no provider has it."""
357
+ return self._resolve('', name, self.entries)
358
+
359
+ def getfrom(self, store, name):
360
+ """The secret from one named store, or a SekretoError if that store
361
+ does not have it."""
362
+ found = self.tryfrom(store, name)
363
+
364
+ if found is None:
365
+ raise SekretoError('sekreto: unknown secret: ' + store + ':' + name)
366
+
367
+ return found
368
+
369
+ def tryfrom(self, store, name):
370
+ """The secret from one named store, or None if that store does not
371
+ have it.
372
+
373
+ Naming a store that is not in the chain is an error, not a miss:
374
+ `try` already means "this store may not have it", so it cannot also
375
+ mean "this store may not exist" without hiding a typo.
376
+ """
377
+ matching = [entry for entry in self.entries if entry[0] == store]
378
+
379
+ if 0 == len(matching):
380
+ raise SekretoError('sekreto: unknown store: ' + store)
381
+
382
+ return self._resolve(store, name, matching)
383
+
384
+ def _resolve(self, store, name, entries):
385
+ checkname(name)
386
+
387
+ if self.docache:
388
+ for cached in self.cache:
389
+ if cached[0] == store and cached[1] == name:
390
+ return cached[2]
391
+
392
+ for _storename, provider in entries:
393
+ found = provider.lookup(name)
394
+
395
+ if found is not None:
396
+ if self.docache:
397
+ self.cache.append((store, name, found))
398
+ self.seen.append(found)
399
+ return found
400
+
401
+ return None
402
+
403
+ def has(self, name):
404
+ """Does any provider have this secret?"""
405
+ return self.try_(name) is not None
406
+
407
+ def hasin(self, store, name):
408
+ """Does this named store have this secret?"""
409
+ return self.tryfrom(store, name) is not None
410
+
411
+ def all(self, names):
412
+ """Every named secret at once. Missing ones are an error."""
413
+ return {name: self.get(name) for name in names}
414
+
415
+ def sources(self):
416
+ """A description of each provider, in resolution order."""
417
+ return [provider.describe() for _store, provider in self.entries]
418
+
419
+ def stores(self):
420
+ """The name of each store that can be named by `getfrom`, in
421
+ resolution order and without repeats."""
422
+ out = []
423
+
424
+ for store, _provider in self.entries:
425
+ if store not in out:
426
+ out.append(store)
427
+
428
+ return out
429
+
430
+ def redact(self, text):
431
+ """Replace every value this Sekreto has resolved with `[redacted]`.
432
+
433
+ Works whether or not caching is enabled: the redaction list is kept
434
+ independently of the read cache.
435
+ """
436
+ return redact(text, self.seen)
437
+
438
+ def refresh(self):
439
+ """Drop cached values, so the next `get` asks the providers again."""
440
+ self.cache.clear()
441
+
442
+ def close(self):
443
+ """Tear the chain down: every plugin instance is deactivated and
444
+ unloaded, in reverse, releasing whatever a provider acquired at
445
+ activation. Afterwards there is nothing to read from - `get`
446
+ reports every secret unknown - and the cache is dropped, though
447
+ `redact` still knows every value that was ever resolved."""
448
+ self.host.close()
449
+ self.entries = []
450
+ self.cache.clear()
451
+
452
+
453
+ def sekreto(options=None):
454
+ """Make a Sekreto from options."""
455
+ return Sekreto(options)