@voxgig/sdkgen 4.8.3 → 4.10.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 (917) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/helpers/manifest.d.ts +2 -1
  3. package/dist/helpers/manifest.js +75 -1
  4. package/dist/helpers/manifest.js.map +1 -1
  5. package/dist/helpers/modelNames.d.ts +7 -0
  6. package/dist/helpers/modelNames.js +232 -0
  7. package/dist/helpers/modelNames.js.map +1 -0
  8. package/dist/helpers/naming.d.ts +2 -1
  9. package/dist/helpers/naming.js +45 -1
  10. package/dist/helpers/naming.js.map +1 -1
  11. package/dist/sdkgen.d.ts +3 -2
  12. package/dist/sdkgen.js +12 -3
  13. package/dist/sdkgen.js.map +1 -1
  14. package/dist/testkit.d.ts +2 -0
  15. package/dist/testkit.js +80 -24
  16. package/dist/testkit.js.map +1 -1
  17. package/dist/tsconfig.tsbuildinfo +1 -1
  18. package/dist/utility.js +17 -7
  19. package/dist/utility.js.map +1 -1
  20. package/package.json +1 -1
  21. package/project/.sdk/model/feature/secrets.aon +671 -0
  22. package/project/.sdk/model/target/clojure.aon +10 -0
  23. package/project/.sdk/model/target/csharp.aon +5 -0
  24. package/project/.sdk/model/target/elixir.aon +6 -0
  25. package/project/.sdk/model/target/java.aon +5 -0
  26. package/project/.sdk/model/target/js.aon +5 -0
  27. package/project/.sdk/model/target/kotlin.aon +7 -0
  28. package/project/.sdk/model/target/perl.aon +5 -0
  29. package/project/.sdk/model/target/php.aon +5 -0
  30. package/project/.sdk/model/target/rb.aon +5 -0
  31. package/project/.sdk/model/target/rust.aon +5 -0
  32. package/project/.sdk/model/target/scala.aon +38 -2
  33. package/project/.sdk/model/target/swift.aon +10 -0
  34. package/project/.sdk/model/target/zig.aon +9 -0
  35. package/project/.sdk/src/cmp/clojure/Config_clojure.ts +51 -4
  36. package/project/.sdk/src/cmp/clojure/Main_clojure.ts +43 -1
  37. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +17 -1
  38. package/project/.sdk/src/cmp/clojure/featureextra_clojure.ts +130 -0
  39. package/project/.sdk/src/cmp/csharp/Config_csharp.ts +70 -0
  40. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +9 -1
  41. package/project/.sdk/src/cmp/csharp/Package_csharp.ts +25 -1
  42. package/project/.sdk/src/cmp/elixir/Config_elixir.ts +68 -2
  43. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +16 -0
  44. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +14 -1
  45. package/project/.sdk/src/cmp/java/Config_java.ts +84 -2
  46. package/project/.sdk/src/cmp/java/Main_java.ts +10 -1
  47. package/project/.sdk/src/cmp/js/Config_js.ts +75 -8
  48. package/project/.sdk/src/cmp/js/Main_js.ts +66 -2
  49. package/project/.sdk/src/cmp/js/fragment/Config.data.fragment.js +18 -1
  50. package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +18 -1
  51. package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +7 -0
  52. package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +63 -1
  53. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +32 -2
  54. package/project/.sdk/src/cmp/perl/Config_perl.ts +129 -3
  55. package/project/.sdk/src/cmp/perl/Main_perl.ts +41 -1
  56. package/project/.sdk/src/cmp/perl/Package_perl.ts +13 -1
  57. package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +1 -0
  58. package/project/.sdk/src/cmp/php/Config_php.ts +105 -1
  59. package/project/.sdk/src/cmp/php/Gitignore_php.ts +4 -2
  60. package/project/.sdk/src/cmp/php/Main_php.ts +16 -1
  61. package/project/.sdk/src/cmp/rb/Config_rb.ts +92 -2
  62. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +11 -1
  63. package/project/.sdk/src/cmp/rb/Main_rb.ts +7 -1
  64. package/project/.sdk/src/cmp/rust/Main_rust.ts +99 -1
  65. package/project/.sdk/src/cmp/rust/Package_rust.ts +72 -6
  66. package/project/.sdk/src/cmp/scala/Config_scala.ts +44 -0
  67. package/project/.sdk/src/cmp/scala/Main_scala.ts +68 -1
  68. package/project/.sdk/src/cmp/swift/Config_swift.ts +62 -1
  69. package/project/.sdk/src/cmp/swift/Main_swift.ts +35 -1
  70. package/project/.sdk/src/cmp/swift/Package_swift.ts +81 -11
  71. package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +58 -44
  72. package/project/.sdk/src/cmp/swift/utility_swift.ts +22 -0
  73. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  74. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  75. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  76. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  77. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  78. package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
  79. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
  80. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
  81. package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
  82. package/project/.sdk/tm/clojure/Makefile +3 -0
  83. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +503 -0
  84. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +84 -0
  85. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +44 -0
  86. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +240 -0
  87. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +199 -0
  88. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +111 -0
  89. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +46 -0
  90. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +122 -0
  91. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +1018 -0
  92. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +106 -0
  93. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +157 -0
  94. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +77 -0
  95. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +92 -0
  96. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +46 -0
  97. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +177 -0
  98. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +90 -0
  99. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +40 -0
  100. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +111 -0
  101. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +297 -0
  102. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +192 -0
  103. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +261 -0
  104. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +165 -0
  105. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +111 -0
  106. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +107 -0
  107. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +61 -0
  108. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +88 -0
  109. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +115 -0
  110. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +214 -0
  111. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +80 -0
  112. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +93 -0
  113. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +63 -0
  114. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +99 -0
  115. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +142 -0
  116. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +25 -0
  117. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +196 -0
  118. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +113 -0
  119. package/project/.sdk/tm/clojure/src/sdk/core.clj +9 -0
  120. package/project/.sdk/tm/clojure/src/sdk/features.clj +13 -1
  121. package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +547 -0
  122. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +103 -14
  123. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
  124. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
  125. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
  126. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
  127. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
  128. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
  129. package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +889 -0
  130. package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +196 -0
  131. package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +70 -0
  132. package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +505 -0
  133. package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +52 -0
  134. package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +285 -0
  135. package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +55 -0
  136. package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +228 -0
  137. package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +102 -0
  138. package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +256 -0
  139. package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +1379 -0
  140. package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +177 -0
  141. package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +326 -0
  142. package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +295 -0
  143. package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +113 -0
  144. package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +177 -0
  145. package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +198 -0
  146. package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +95 -0
  147. package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +351 -0
  148. package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +196 -0
  149. package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +325 -0
  150. package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +195 -0
  151. package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +192 -0
  152. package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +75 -0
  153. package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +112 -0
  154. package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +167 -0
  155. package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +221 -0
  156. package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +213 -0
  157. package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +155 -0
  158. package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +169 -0
  159. package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +172 -0
  160. package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +240 -0
  161. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +192 -0
  162. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +503 -0
  163. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +775 -0
  164. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +1702 -0
  165. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
  166. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
  167. package/project/.sdk/tm/csharp/utility/MakeOptions.cs +10 -0
  168. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
  169. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +118 -0
  170. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +56 -0
  171. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +320 -0
  172. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +205 -0
  173. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +166 -0
  174. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +13 -0
  175. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +73 -0
  176. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +185 -0
  177. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +1182 -0
  178. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +139 -0
  179. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +132 -0
  180. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +179 -0
  181. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +99 -0
  182. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +129 -0
  183. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +59 -0
  184. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +190 -0
  185. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +136 -0
  186. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +42 -0
  187. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +368 -0
  188. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +257 -0
  189. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +160 -0
  190. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +127 -0
  191. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +96 -0
  192. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +124 -0
  193. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +162 -0
  194. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +627 -0
  195. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +134 -0
  196. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +125 -0
  197. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +152 -0
  198. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +80 -0
  199. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +101 -0
  200. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +176 -0
  201. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +67 -0
  202. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +536 -0
  203. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +662 -0
  204. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +824 -0
  205. package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +1072 -0
  206. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
  207. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
  208. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
  209. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  210. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  211. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  212. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  213. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  214. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
  215. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  216. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
  217. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  218. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  219. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  220. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  221. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  222. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  223. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  224. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +4 -4
  225. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
  226. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
  227. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
  228. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
  229. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
  230. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +4 -5
  231. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +3 -3
  232. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +3 -4
  233. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
  234. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
  235. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
  236. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +5 -2
  237. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +31 -2
  238. package/project/.sdk/tm/go/feature/secrets_feature.go +16 -0
  239. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +123 -0
  240. package/project/.sdk/tm/go/test/omni/omni.go +8 -3
  241. package/project/.sdk/tm/go/test/omni/util.go +25 -4
  242. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
  243. package/project/.sdk/tm/java/feature/SecretsFeature.java +766 -0
  244. package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +181 -0
  245. package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +64 -0
  246. package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +433 -0
  247. package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +54 -0
  248. package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +292 -0
  249. package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +49 -0
  250. package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +204 -0
  251. package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +93 -0
  252. package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +244 -0
  253. package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +1196 -0
  254. package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +173 -0
  255. package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +339 -0
  256. package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +274 -0
  257. package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +94 -0
  258. package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +37 -0
  259. package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +172 -0
  260. package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +171 -0
  261. package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +89 -0
  262. package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +232 -0
  263. package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +198 -0
  264. package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +142 -0
  265. package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +229 -0
  266. package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +302 -0
  267. package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +21 -0
  268. package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +698 -0
  269. package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +100 -0
  270. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +294 -0
  271. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +164 -0
  272. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +161 -0
  273. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +103 -0
  274. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +143 -0
  275. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +186 -0
  276. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +192 -0
  277. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +139 -0
  278. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +143 -0
  279. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +80 -0
  280. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +138 -0
  281. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +243 -0
  282. package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +986 -0
  283. package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
  284. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
  285. package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
  286. package/project/.sdk/tm/java/utility/MakeOptions.java +7 -0
  287. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  288. package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +431 -0
  289. package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +119 -0
  290. package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +42 -0
  291. package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +323 -0
  292. package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +196 -0
  293. package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +120 -0
  294. package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +48 -0
  295. package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +150 -0
  296. package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +949 -0
  297. package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +35 -0
  298. package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +165 -0
  299. package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +94 -0
  300. package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +106 -0
  301. package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +59 -0
  302. package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +79 -0
  303. package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +100 -0
  304. package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +574 -0
  305. package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +56 -0
  306. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +188 -0
  307. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +135 -0
  308. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +128 -0
  309. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +67 -0
  310. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +115 -0
  311. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +139 -0
  312. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +93 -0
  313. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +99 -0
  314. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +111 -0
  315. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +105 -0
  316. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +157 -0
  317. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +119 -0
  318. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +39 -0
  319. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +40 -0
  320. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +21 -0
  321. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +42 -0
  322. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +18 -0
  323. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +151 -0
  324. package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
  325. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +946 -0
  326. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  327. package/project/.sdk/tm/js/test/vendor/omni/runner.js +18 -3
  328. package/project/.sdk/tm/js/test/vendor/omni/util.js +25 -8
  329. package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +659 -0
  330. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +117 -0
  331. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +40 -0
  332. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +322 -0
  333. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +227 -0
  334. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +163 -0
  335. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +57 -0
  336. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +179 -0
  337. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +1131 -0
  338. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +241 -0
  339. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +180 -0
  340. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +64 -0
  341. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +124 -0
  342. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +125 -0
  343. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +66 -0
  344. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +171 -0
  345. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +132 -0
  346. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +359 -0
  347. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +21 -0
  348. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +308 -0
  349. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +525 -0
  350. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +126 -0
  351. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +205 -0
  352. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +251 -0
  353. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +145 -0
  354. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +130 -0
  355. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +77 -0
  356. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +119 -0
  357. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +156 -0
  358. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +219 -0
  359. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +114 -0
  360. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +114 -0
  361. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +118 -0
  362. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +220 -0
  363. package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +1148 -0
  364. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
  365. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
  366. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
  367. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  368. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
  369. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
  370. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
  371. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
  372. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  373. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  374. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
  375. package/project/.sdk/tm/perl/Makefile +6 -1
  376. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +141 -0
  377. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +65 -0
  378. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +346 -0
  379. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +216 -0
  380. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +176 -0
  381. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +59 -0
  382. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +157 -0
  383. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +1139 -0
  384. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +187 -0
  385. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +100 -0
  386. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +119 -0
  387. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +71 -0
  388. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +251 -0
  389. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +122 -0
  390. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +70 -0
  391. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +263 -0
  392. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +159 -0
  393. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +180 -0
  394. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +92 -0
  395. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +138 -0
  396. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +213 -0
  397. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +173 -0
  398. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +132 -0
  399. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +132 -0
  400. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +102 -0
  401. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +132 -0
  402. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +190 -0
  403. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +124 -0
  404. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +301 -0
  405. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +605 -0
  406. package/project/.sdk/tm/perl/feature/secrets_feature.pm +675 -0
  407. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  408. package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +957 -0
  409. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  410. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  411. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  412. package/project/.sdk/tm/php/feature/SecretsFeature.php +670 -0
  413. package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +226 -0
  414. package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +75 -0
  415. package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +444 -0
  416. package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +262 -0
  417. package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +202 -0
  418. package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +74 -0
  419. package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +195 -0
  420. package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +1514 -0
  421. package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +260 -0
  422. package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +129 -0
  423. package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +169 -0
  424. package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +79 -0
  425. package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +348 -0
  426. package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +163 -0
  427. package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +40 -0
  428. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +274 -0
  429. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +170 -0
  430. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +163 -0
  431. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +106 -0
  432. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +144 -0
  433. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +194 -0
  434. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +113 -0
  435. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +131 -0
  436. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +150 -0
  437. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +101 -0
  438. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +146 -0
  439. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +161 -0
  440. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +129 -0
  441. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +322 -0
  442. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +724 -0
  443. package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +1067 -0
  444. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
  445. package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
  446. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  447. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  448. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  449. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  450. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  451. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  452. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
  453. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  454. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
  455. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  456. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  457. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  458. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  459. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  460. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  461. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +4 -2
  462. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  463. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +3 -3
  464. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  465. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  466. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  467. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  468. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +3 -4
  469. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  470. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +4 -6
  471. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  472. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  473. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  474. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
  475. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +21 -1
  476. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  477. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  478. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +16 -2
  479. package/project/.sdk/tm/py/test/voxgig_omni/util.py +27 -12
  480. package/project/.sdk/tm/rb/Makefile +7 -1
  481. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +118 -0
  482. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +55 -0
  483. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +315 -0
  484. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +197 -0
  485. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +143 -0
  486. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +52 -0
  487. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +147 -0
  488. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +1079 -0
  489. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +169 -0
  490. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +93 -0
  491. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +112 -0
  492. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +56 -0
  493. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +99 -0
  494. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +106 -0
  495. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +24 -0
  496. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +111 -0
  497. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +200 -0
  498. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +130 -0
  499. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +121 -0
  500. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +66 -0
  501. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +107 -0
  502. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +137 -0
  503. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +136 -0
  504. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +97 -0
  505. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +104 -0
  506. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +113 -0
  507. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +127 -0
  508. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +210 -0
  509. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +465 -0
  510. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +30 -0
  511. package/project/.sdk/tm/rb/feature/secrets_feature.rb +561 -0
  512. package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +842 -0
  513. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
  514. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
  515. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
  516. package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +130 -0
  517. package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +114 -0
  518. package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +416 -0
  519. package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +245 -0
  520. package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +200 -0
  521. package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +90 -0
  522. package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +231 -0
  523. package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +1565 -0
  524. package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +18 -0
  525. package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +226 -0
  526. package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +137 -0
  527. package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +148 -0
  528. package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +83 -0
  529. package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +132 -0
  530. package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +433 -0
  531. package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +174 -0
  532. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +146 -0
  533. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +230 -0
  534. package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +328 -0
  535. package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +184 -0
  536. package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +172 -0
  537. package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +102 -0
  538. package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +153 -0
  539. package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +228 -0
  540. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +537 -0
  541. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +300 -0
  542. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +137 -0
  543. package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +148 -0
  544. package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +165 -0
  545. package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +150 -0
  546. package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +144 -0
  547. package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +51 -0
  548. package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +637 -0
  549. package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +677 -0
  550. package/project/.sdk/tm/rust/feature/secrets.rs +961 -0
  551. package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +1509 -0
  552. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
  553. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
  554. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
  555. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
  556. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
  557. package/project/.sdk/tm/scala/Makefile +8 -3
  558. package/project/.sdk/tm/scala/feature/SecretsFeature.scala +556 -0
  559. package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +96 -0
  560. package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +270 -0
  561. package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +216 -0
  562. package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +144 -0
  563. package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +59 -0
  564. package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +149 -0
  565. package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +1089 -0
  566. package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +156 -0
  567. package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +169 -0
  568. package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +47 -0
  569. package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +107 -0
  570. package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +131 -0
  571. package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +53 -0
  572. package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +110 -0
  573. package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +157 -0
  574. package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +136 -0
  575. package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +302 -0
  576. package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +20 -0
  577. package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +281 -0
  578. package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +473 -0
  579. package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +123 -0
  580. package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +216 -0
  581. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +225 -0
  582. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +124 -0
  583. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +104 -0
  584. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +68 -0
  585. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +97 -0
  586. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +131 -0
  587. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +209 -0
  588. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +98 -0
  589. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +90 -0
  590. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +95 -0
  591. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +214 -0
  592. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +971 -0
  593. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
  594. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
  595. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
  596. package/project/.sdk/tm/scala/utility/Make.scala +7 -0
  597. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/SecretsFeature.swift +669 -0
  598. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +98 -0
  599. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +87 -0
  600. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +298 -0
  601. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +209 -0
  602. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +191 -0
  603. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +63 -0
  604. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +158 -0
  605. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +1141 -0
  606. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +192 -0
  607. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +183 -0
  608. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +130 -0
  609. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +141 -0
  610. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +59 -0
  611. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +125 -0
  612. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +198 -0
  613. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +139 -0
  614. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +271 -0
  615. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +173 -0
  616. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +139 -0
  617. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +198 -0
  618. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +86 -0
  619. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +129 -0
  620. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +175 -0
  621. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +310 -0
  622. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +140 -0
  623. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +118 -0
  624. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +105 -0
  625. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +111 -0
  626. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +297 -0
  627. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +120 -0
  628. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +452 -0
  629. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +25 -0
  630. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +689 -0
  631. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +755 -0
  632. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +9 -0
  633. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +30 -0
  634. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/feature/secrets/SecretsFeatureTest.swift +1030 -0
  635. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
  636. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
  637. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
  638. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  639. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  640. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  641. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  642. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  643. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
  644. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  645. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  646. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
  647. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  648. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  649. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  650. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  651. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  652. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  653. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  654. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  655. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  656. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  657. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  658. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  659. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  660. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  661. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  662. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  663. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  664. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  665. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  666. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  667. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  668. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
  669. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  670. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  671. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  672. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  673. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
  674. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
  675. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  676. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  677. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  678. package/project/.sdk/tm/zig/Makefile +15 -1
  679. package/project/.sdk/tm/zig/build.zig +23 -5
  680. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  681. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  682. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  683. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  684. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  685. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  686. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  687. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  688. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  689. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  690. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  691. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  692. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  693. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  694. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  695. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  696. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  697. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  698. package/project/.sdk/tm/zig/test/primary_utility_test.zig +144 -154
  699. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  700. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  701. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  702. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  703. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  704. package/project/sdkgen-package.json +1 -4
  705. package/src/helpers/manifest.ts +81 -1
  706. package/src/helpers/modelNames.ts +284 -0
  707. package/src/helpers/naming.ts +45 -1
  708. package/src/sdkgen.ts +11 -1
  709. package/src/testkit.ts +115 -26
  710. package/src/utility.ts +17 -7
  711. package/project/.sdk/model/target/dart.aon +0 -58
  712. package/project/.sdk/model/target/lean.aon +0 -91
  713. package/project/.sdk/model/target/seneca-provider.aon +0 -120
  714. package/project/.sdk/src/cmp/dart/Config_dart.ts +0 -176
  715. package/project/.sdk/src/cmp/dart/EntityBase_dart.ts +0 -34
  716. package/project/.sdk/src/cmp/dart/EntityOperation_dart.ts +0 -43
  717. package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +0 -207
  718. package/project/.sdk/src/cmp/dart/Entity_dart.ts +0 -87
  719. package/project/.sdk/src/cmp/dart/Gitignore_dart.ts +0 -34
  720. package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +0 -33
  721. package/project/.sdk/src/cmp/dart/Main_dart.ts +0 -106
  722. package/project/.sdk/src/cmp/dart/Package_dart.ts +0 -82
  723. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +0 -177
  724. package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +0 -238
  725. package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +0 -53
  726. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +0 -152
  727. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +0 -59
  728. package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +0 -65
  729. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +0 -151
  730. package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +0 -63
  731. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +0 -225
  732. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +0 -397
  733. package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +0 -24
  734. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +0 -106
  735. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +0 -78
  736. package/project/.sdk/src/cmp/dart/SdkError_dart.ts +0 -42
  737. package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +0 -516
  738. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +0 -628
  739. package/project/.sdk/src/cmp/dart/Test_dart.ts +0 -116
  740. package/project/.sdk/src/cmp/dart/fragment/Config.data.fragment.dart +0 -79
  741. package/project/.sdk/src/cmp/dart/fragment/Config.fragment.dart +0 -51
  742. package/project/.sdk/src/cmp/dart/fragment/Direct.test.fragment.dart +0 -25
  743. package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +0 -29
  744. package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +0 -28
  745. package/project/.sdk/src/cmp/dart/fragment/EntityBase.fragment.dart +0 -302
  746. package/project/.sdk/src/cmp/dart/fragment/EntityCreateOp.fragment.dart +0 -98
  747. package/project/.sdk/src/cmp/dart/fragment/EntityListOp.fragment.dart +0 -90
  748. package/project/.sdk/src/cmp/dart/fragment/EntityLoadOp.fragment.dart +0 -102
  749. package/project/.sdk/src/cmp/dart/fragment/EntityRemoveOp.fragment.dart +0 -108
  750. package/project/.sdk/src/cmp/dart/fragment/EntityUpdateOp.fragment.dart +0 -102
  751. package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +0 -338
  752. package/project/.sdk/src/cmp/dart/fragment/SdkError.fragment.dart +0 -26
  753. package/project/.sdk/src/cmp/dart/tsconfig.json +0 -15
  754. package/project/.sdk/src/cmp/dart/utility_dart.ts +0 -155
  755. package/project/.sdk/src/cmp/lean/Config_lean.ts +0 -93
  756. package/project/.sdk/src/cmp/lean/Entity_lean.ts +0 -9
  757. package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +0 -18
  758. package/project/.sdk/src/cmp/lean/Main_lean.ts +0 -120
  759. package/project/.sdk/src/cmp/lean/Package_lean.ts +0 -93
  760. package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +0 -29
  761. package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +0 -19
  762. package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +0 -25
  763. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +0 -39
  764. package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +0 -25
  765. package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +0 -24
  766. package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +0 -22
  767. package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +0 -50
  768. package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +0 -40
  769. package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +0 -16
  770. package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +0 -23
  771. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +0 -19
  772. package/project/.sdk/src/cmp/lean/Test_lean.ts +0 -261
  773. package/project/.sdk/src/cmp/lean/utility_lean.ts +0 -129
  774. package/project/.sdk/src/cmp/seneca-provider/Extras_seneca-provider.ts +0 -4080
  775. package/project/.sdk/src/cmp/seneca-provider/Gitignore_seneca-provider.ts +0 -161
  776. package/project/.sdk/src/cmp/seneca-provider/Main_seneca-provider.ts +0 -1011
  777. package/project/.sdk/tm/dart/LICENSE +0 -22
  778. package/project/.sdk/tm/dart/Makefile +0 -50
  779. package/project/.sdk/tm/dart/lib/Context.dart +0 -150
  780. package/project/.sdk/tm/dart/lib/Control.dart +0 -15
  781. package/project/.sdk/tm/dart/lib/Operation.dart +0 -31
  782. package/project/.sdk/tm/dart/lib/Point.dart +0 -51
  783. package/project/.sdk/tm/dart/lib/Response.dart +0 -32
  784. package/project/.sdk/tm/dart/lib/Result.dart +0 -39
  785. package/project/.sdk/tm/dart/lib/Spec.dart +0 -49
  786. package/project/.sdk/tm/dart/lib/feature/audit/AuditFeature.dart +0 -103
  787. package/project/.sdk/tm/dart/lib/feature/base/BaseFeature.dart +0 -76
  788. package/project/.sdk/tm/dart/lib/feature/cache/CacheFeature.dart +0 -152
  789. package/project/.sdk/tm/dart/lib/feature/clienttrack/ClienttrackFeature.dart +0 -104
  790. package/project/.sdk/tm/dart/lib/feature/cost/CostFeature.dart +0 -446
  791. package/project/.sdk/tm/dart/lib/feature/debug/DebugFeature.dart +0 -153
  792. package/project/.sdk/tm/dart/lib/feature/idempotency/IdempotencyFeature.dart +0 -92
  793. package/project/.sdk/tm/dart/lib/feature/log/LogFeature.dart +0 -85
  794. package/project/.sdk/tm/dart/lib/feature/metrics/MetricsFeature.dart +0 -103
  795. package/project/.sdk/tm/dart/lib/feature/netsim/NetsimFeature.dart +0 -186
  796. package/project/.sdk/tm/dart/lib/feature/paging/PagingFeature.dart +0 -240
  797. package/project/.sdk/tm/dart/lib/feature/proxy/ProxyFeature.dart +0 -118
  798. package/project/.sdk/tm/dart/lib/feature/ratelimit/RatelimitFeature.dart +0 -103
  799. package/project/.sdk/tm/dart/lib/feature/rbac/RbacFeature.dart +0 -121
  800. package/project/.sdk/tm/dart/lib/feature/retry/RetryFeature.dart +0 -155
  801. package/project/.sdk/tm/dart/lib/feature/streaming/StreamingFeature.dart +0 -97
  802. package/project/.sdk/tm/dart/lib/feature/telemetry/TelemetryFeature.dart +0 -136
  803. package/project/.sdk/tm/dart/lib/feature/test/TestFeature.dart +0 -328
  804. package/project/.sdk/tm/dart/lib/feature/timeout/TimeoutFeature.dart +0 -104
  805. package/project/.sdk/tm/dart/lib/utility/CleanUtility.dart +0 -12
  806. package/project/.sdk/tm/dart/lib/utility/DoneUtility.dart +0 -18
  807. package/project/.sdk/tm/dart/lib/utility/ErrUtility.dart +0 -46
  808. package/project/.sdk/tm/dart/lib/utility/FeatureAddUtility.dart +0 -35
  809. package/project/.sdk/tm/dart/lib/utility/FeatureHookUtility.dart +0 -20
  810. package/project/.sdk/tm/dart/lib/utility/FeatureInitUtility.dart +0 -9
  811. package/project/.sdk/tm/dart/lib/utility/FetcherUtility.dart +0 -104
  812. package/project/.sdk/tm/dart/lib/utility/GraphqlUtility.dart +0 -162
  813. package/project/.sdk/tm/dart/lib/utility/MakeContextUtility.dart +0 -6
  814. package/project/.sdk/tm/dart/lib/utility/MakeErrorUtility.dart +0 -71
  815. package/project/.sdk/tm/dart/lib/utility/MakeFetchDefUtility.dart +0 -42
  816. package/project/.sdk/tm/dart/lib/utility/MakeOptionsUtility.dart +0 -233
  817. package/project/.sdk/tm/dart/lib/utility/MakePointUtility.dart +0 -130
  818. package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +0 -66
  819. package/project/.sdk/tm/dart/lib/utility/MakeResponseUtility.dart +0 -59
  820. package/project/.sdk/tm/dart/lib/utility/MakeResultUtility.dart +0 -49
  821. package/project/.sdk/tm/dart/lib/utility/MakeSpecUtility.dart +0 -77
  822. package/project/.sdk/tm/dart/lib/utility/MakeUrlUtility.dart +0 -51
  823. package/project/.sdk/tm/dart/lib/utility/ParamUtility.dart +0 -56
  824. package/project/.sdk/tm/dart/lib/utility/PrepareAuthUtility.dart +0 -46
  825. package/project/.sdk/tm/dart/lib/utility/PrepareBodyUtility.dart +0 -19
  826. package/project/.sdk/tm/dart/lib/utility/PrepareHeadersUtility.dart +0 -11
  827. package/project/.sdk/tm/dart/lib/utility/PrepareMethodUtility.dart +0 -30
  828. package/project/.sdk/tm/dart/lib/utility/PrepareParamsUtility.dart +0 -23
  829. package/project/.sdk/tm/dart/lib/utility/PreparePathUtility.dart +0 -9
  830. package/project/.sdk/tm/dart/lib/utility/PrepareQueryUtility.dart +0 -18
  831. package/project/.sdk/tm/dart/lib/utility/ResultBasicUtility.dart +0 -29
  832. package/project/.sdk/tm/dart/lib/utility/ResultBodyUtility.dart +0 -15
  833. package/project/.sdk/tm/dart/lib/utility/ResultHeadersUtility.dart +0 -18
  834. package/project/.sdk/tm/dart/lib/utility/StructUtility.dart +0 -127
  835. package/project/.sdk/tm/dart/lib/utility/TransformRequestUtility.dart +0 -28
  836. package/project/.sdk/tm/dart/lib/utility/TransformResponseUtility.dart +0 -44
  837. package/project/.sdk/tm/dart/lib/utility/Utility.dart +0 -239
  838. package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +0 -2462
  839. package/project/.sdk/tm/dart/src/feature/README.md +0 -3
  840. package/project/.sdk/tm/dart/src/feature/proxy/.gitkeep +0 -0
  841. package/project/.sdk/tm/dart/src/feature/ratelimit/.gitkeep +0 -0
  842. package/project/.sdk/tm/dart/src/feature/rbac/.gitkeep +0 -0
  843. package/project/.sdk/tm/dart/src/feature/retry/.gitkeep +0 -0
  844. package/project/.sdk/tm/dart/src/feature/streaming/.gitkeep +0 -0
  845. package/project/.sdk/tm/dart/src/feature/telemetry/.gitkeep +0 -0
  846. package/project/.sdk/tm/dart/src/feature/test/.gitkeep +0 -0
  847. package/project/.sdk/tm/dart/src/feature/timeout/.gitkeep +0 -0
  848. package/project/.sdk/tm/dart/test/custom_test.dart +0 -65
  849. package/project/.sdk/tm/dart/test/exists_test.dart +0 -12
  850. package/project/.sdk/tm/dart/test/feature/harness.dart +0 -329
  851. package/project/.sdk/tm/dart/test/feature_test.dart +0 -1193
  852. package/project/.sdk/tm/dart/test/harness.dart +0 -153
  853. package/project/.sdk/tm/dart/test/netsim_test.dart +0 -48
  854. package/project/.sdk/tm/dart/test/omni.dart +0 -520
  855. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +0 -143
  856. package/project/.sdk/tm/dart/test/pipeline_test.dart +0 -608
  857. package/project/.sdk/tm/dart/test/primary_test.dart +0 -476
  858. package/project/.sdk/tm/dart/test/sdk-test-control.json +0 -19
  859. package/project/.sdk/tm/dart/test/struct_test.dart +0 -468
  860. package/project/.sdk/tm/dart/test/utility.dart +0 -198
  861. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +0 -7
  862. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +0 -653
  863. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +0 -232
  864. package/project/.sdk/tm/lean/LICENSE +0 -21
  865. package/project/.sdk/tm/lean/Makefile +0 -32
  866. package/project/.sdk/tm/lean/VERSION +0 -1
  867. package/project/.sdk/tm/lean/src/SdkFeature.lean +0 -171
  868. package/project/.sdk/tm/lean/src/SdkFeatures.lean +0 -787
  869. package/project/.sdk/tm/lean/src/SdkJson.lean +0 -134
  870. package/project/.sdk/tm/lean/src/SdkRuntime.lean +0 -374
  871. package/project/.sdk/tm/lean/src/SdkUtility.lean +0 -809
  872. package/project/.sdk/tm/lean/src/VoxgigStruct.lean +0 -2880
  873. package/project/.sdk/tm/lean/src/Vregex.lean +0 -412
  874. package/project/.sdk/tm/lean/src/feature/README.md +0 -5
  875. package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
  876. package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
  877. package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
  878. package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
  879. package/project/.sdk/tm/lean/src/feature/cost/.gitkeep +0 -0
  880. package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
  881. package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
  882. package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
  883. package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
  884. package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
  885. package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
  886. package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
  887. package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
  888. package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
  889. package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
  890. package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
  891. package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
  892. package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
  893. package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
  894. package/project/.sdk/tm/lean/test/OmniResolver.lean +0 -358
  895. package/project/.sdk/tm/lean/test/OmniSmoke.lean +0 -174
  896. package/project/.sdk/tm/lean/test/StructCorpus.lean +0 -368
  897. package/project/.sdk/tm/lean/test/TFeature.lean +0 -281
  898. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +0 -227
  899. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +0 -997
  900. package/project/.sdk/tm/seneca-provider/CODE_OF_CONDUCT.md +0 -132
  901. package/project/.sdk/tm/seneca-provider/LICENSE +0 -21
  902. package/project/.sdk/tm/seneca-provider/Makefile +0 -15
  903. package/project/.sdk/tm/seneca-provider/src/tsconfig.json +0 -18
  904. package/project/.sdk/tm/seneca-provider/test/tsconfig.json +0 -16
  905. package/project/.sdk/tm/seneca-provider/tsfmt.json +0 -3
  906. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -465
  907. /package/project/.sdk/tm/{dart/src/feature/audit → clojure/src/feature/secrets}/.gitkeep +0 -0
  908. /package/project/.sdk/tm/{dart/src/feature/base → csharp/src/feature/secrets}/.gitkeep +0 -0
  909. /package/project/.sdk/tm/{dart/src/feature/cache → elixir/src/feature/secrets}/.gitkeep +0 -0
  910. /package/project/.sdk/tm/{dart/src/feature/clienttrack → java/src/feature/secrets}/.gitkeep +0 -0
  911. /package/project/.sdk/tm/{dart/src/feature/cost → kotlin/src/feature/secrets}/.gitkeep +0 -0
  912. /package/project/.sdk/tm/{dart/src/feature/debug → perl/src/feature/secrets}/.gitkeep +0 -0
  913. /package/project/.sdk/tm/{dart/src/feature/idempotency → php/src/feature/secrets}/.gitkeep +0 -0
  914. /package/project/.sdk/tm/{dart/src/feature/log → rb/src/feature/secrets}/.gitkeep +0 -0
  915. /package/project/.sdk/tm/{dart/src/feature/metrics → rust/src/feature/secrets}/.gitkeep +0 -0
  916. /package/project/.sdk/tm/{dart/src/feature/netsim → scala/src/feature/secrets}/.gitkeep +0 -0
  917. /package/project/.sdk/tm/{dart/src/feature/paging → swift/src/feature/secrets}/.gitkeep +0 -0
@@ -0,0 +1,971 @@
1
+ // Behavioural tests for the secrets feature (vendored @voxgig/sekreto) - the
2
+ // scala port of tm/go/test/feature/secrets/secrets_feature_test.go.
3
+ //
4
+ // The contract under test: the `apikey` OPTION keeps its exact old meaning
5
+ // and always wins, because SecretsFeature places it FIRST in the provider
6
+ // chain (a `memory` store named `options`) - explicit-beats-lookup falls out
7
+ // of sekreto's first-hit rule rather than from special-case logic. With the
8
+ // feature inactive nothing changes at all. With it active and the option
9
+ // unset, the chain supplies the credential instead.
10
+ //
11
+ // EVERY ASSERTION IS ON THE WIRE. Each case builds a LIVE client whose
12
+ // `system.fetch` is the recorder below, so the thing being counted IS the
13
+ // transport - not a harness mock that replaced it. That distinction is the
14
+ // whole difference between a fail-closed test and a test that would pass on
15
+ // an SDK with no secrets feature at all: under the test-mode harness the
16
+ // TestFeature swaps `ctx.utility.fetcher` for its own in-memory mock, so a
17
+ // counter hung off `system.fetch` is never reached and "no request went out"
18
+ // holds vacuously. So each fail-closed case carries a CONTROL leg - the same
19
+ // construction with a WORKING provider - which must reach the same recorder
20
+ // exactly once, and the refusal is matched on the PROVIDER'S OWN message so
21
+ // that an unrelated failure cannot stand in for fail-closed.
22
+ //
23
+ // The feature is CONSTRUCTED DIRECTLY and handed in through the `extend`
24
+ // option when the generated config did not already install it, so these
25
+ // tests hold in any generated tree - whether or not the project's model
26
+ // activated the feature.
27
+ //
28
+ // This file lives in the `feature/` container on purpose: it is per-feature
29
+ // source, and travels with the feature.
30
+
31
+ import java.util.{ArrayList, LinkedHashMap, List => JList, Map => JMap}
32
+ import java.util.function.{BiFunction, Supplier}
33
+
34
+ import scala.collection.mutable.ListBuffer
35
+
36
+ import SCALAPACKAGE.core._
37
+ import SCALAPACKAGE.feature._
38
+ import SCALAPACKAGE.utility.Json
39
+
40
+ object SecretsTestMain {
41
+
42
+ // ---- assertion harness --------------------------------------------------
43
+
44
+ private var npass = 0
45
+ private val failures = new ArrayList[String]()
46
+
47
+ private def pass(): Unit = { npass += 1 }
48
+ private def fail(name: String, msg: String): Unit = failures.add(name + ": " + msg)
49
+ private def check(name: String, cond: Boolean, msg: String): Unit =
50
+ if (cond) pass() else fail(name, msg)
51
+ private def eqs(name: String, exp: String, act: String): Unit =
52
+ check(name, exp == act, "expected \"" + exp + "\", got \"" + act + "\"")
53
+ private def eqs(name: String, exp: String, act: String, why: String): Unit =
54
+ check(name, exp == act,
55
+ "expected \"" + exp + "\", got \"" + act + "\" - " + why)
56
+ private def eqi(name: String, exp: Int, act: Int): Unit =
57
+ check(name, exp == act, "expected " + exp + ", got " + act)
58
+
59
+ // The Authorization header carries the SPEC's credential prefix, which a
60
+ // TEMPLATE cannot know: an OpenAPI `http`/`bearer` scheme gives `Bearer
61
+ // <token>`, an apiKey scheme the raw token. So assert on the CREDENTIAL and
62
+ // let the prefix be whatever this SDK's API declares - pinning the whole
63
+ // header value passes only for a prefix-less API, and this file ships to
64
+ // every project that selects the feature.
65
+ private def credentialIs(name: String, header: String, token: String): Unit = {
66
+ val got = if (header == null) "" else header
67
+ check(name, got == token || got.endsWith(" " + token),
68
+ "expected the authorization header to carry " + token + ", got \"" + got + "\"")
69
+ }
70
+
71
+ // ---- the recording transport --------------------------------------------
72
+ //
73
+ // system.fetch for a LIVE client: one status per API call (the last
74
+ // repeating), plus a token endpoint for the exchange cases.
75
+
76
+ final class Wire {
77
+ val calls = new ArrayList[JMap[String, Object]]()
78
+ var apistatus: List[Int] = List(200)
79
+ var tokens: List[String] = List("ACCESS01", "ACCESS02", "ACCESS03")
80
+ var tokenpath: String = "auth/token"
81
+ var respfield: String = "access_token"
82
+ var tokenstatus: List[Int] = List(200)
83
+
84
+ private var issued = 0
85
+ private var apicalls = 0
86
+ private var tokencalls = 0
87
+
88
+ val fetch: BiFunction[String, JMap[String, Object], Object] =
89
+ (url: String, fetchdef: JMap[String, Object]) => this.synchronized {
90
+ val headers = fetchdef.get("headers") match {
91
+ case m: JMap[_, _] => m.asInstanceOf[JMap[String, Object]]
92
+ case _ => new LinkedHashMap[String, Object]()
93
+ }
94
+ val call = new LinkedHashMap[String, Object]()
95
+ call.put("url", url)
96
+ call.put("has", java.lang.Boolean.valueOf(headers.containsKey("authorization")))
97
+ call.put("auth", headers.get("authorization") match {
98
+ case s: String => s
99
+ case _ => ""
100
+ })
101
+ call.put("body", fetchdef.get("body") match { case s: String => s; case _ => "" })
102
+ calls.add(call)
103
+
104
+ if (url.endsWith("/" + tokenpath)) {
105
+ val status = tokenstatus(math.min(tokencalls, tokenstatus.length - 1))
106
+ tokencalls += 1
107
+ val token = tokens(math.min(issued, tokens.length - 1))
108
+ issued += 1
109
+ val payload = new LinkedHashMap[String, Object]()
110
+ if (200 <= status && 300 > status) payload.put(respfield, token)
111
+ else payload.put("error", "nope")
112
+ response(status, payload)
113
+ } else {
114
+ val status = apistatus(math.min(apicalls, apistatus.length - 1))
115
+ apicalls += 1
116
+ val payload = new LinkedHashMap[String, Object]()
117
+ payload.put("ok", java.lang.Boolean.valueOf(400 > status))
118
+ response(status, payload)
119
+ }
120
+ }
121
+
122
+ private def response(status: Int, data: JMap[String, Object]): JMap[String, Object] = {
123
+ val js: Supplier[Object] = () => data
124
+ val out = new LinkedHashMap[String, Object]()
125
+ out.put("status", java.lang.Integer.valueOf(status))
126
+ out.put("statusText", if (400 <= status) "ERR" else "OK")
127
+ out.put("headers", new LinkedHashMap[String, Object]())
128
+ out.put("json", js)
129
+ out
130
+ }
131
+
132
+ private def matching(token: Boolean): List[JMap[String, Object]] = {
133
+ val out = ListBuffer.empty[JMap[String, Object]]
134
+ val it = calls.iterator()
135
+ while (it.hasNext) {
136
+ val c = it.next()
137
+ val url = c.get("url") match { case s: String => s; case _ => "" }
138
+ if (url.endsWith("/" + tokenpath) == token) out += c
139
+ }
140
+ out.toList
141
+ }
142
+
143
+ // Only the calls that went to the API, and only those that went to the
144
+ // token endpoint.
145
+ def api(): List[JMap[String, Object]] = matching(false)
146
+ def token(): List[JMap[String, Object]] = matching(true)
147
+
148
+ def authof(call: JMap[String, Object]): String =
149
+ call.get("auth") match { case s: String => s; case _ => "" }
150
+ def hasauth(call: JMap[String, Object]): Boolean =
151
+ java.lang.Boolean.TRUE == call.get("has")
152
+
153
+ // What went out, for a failure message that names the leak rather than
154
+ // just its count.
155
+ def report(): String =
156
+ api().map(c => String.valueOf(c.get("url")) + " auth=\"" + authof(c) + "\"")
157
+ .mkString(", ")
158
+ }
159
+
160
+ // ---- small builders ------------------------------------------------------
161
+
162
+ private val ENVPREFIX = "PROJECTENV_TEST_SECRETS_"
163
+ private val BASE = "http://secrets.test/api"
164
+
165
+ private def jmap(kv: (String, Object)*): JMap[String, Object] = {
166
+ val m = new LinkedHashMap[String, Object]()
167
+ kv.foreach { case (k, v) => m.put(k, v) }
168
+ m
169
+ }
170
+
171
+ private def jlist(xs: Object*): JList[Object] = {
172
+ val l = new ArrayList[Object]()
173
+ xs.foreach(l.add)
174
+ l
175
+ }
176
+
177
+ private def sdkopts(w: Wire, extra: (String, Object)*): JMap[String, Object] = {
178
+ val opts = jmap("base" -> BASE, "system" -> jmap("fetch" -> w.fetch))
179
+ extra.foreach { case (k, v) => opts.put(k, v) }
180
+ opts
181
+ }
182
+
183
+ // The feature options: a chain of one MEMORY store unless a case says
184
+ // otherwise. `memory` rather than `env` because a JVM cannot set its own
185
+ // environment - see the `env` case at the end, which proves the env
186
+ // built-in is live by reading a variable that is already there.
187
+ private def secretsOpts(providers: JList[Object], extra: (String, Object)*): JMap[String, Object] = {
188
+ val fopts = jmap(
189
+ "active" -> java.lang.Boolean.TRUE,
190
+ "providers" -> providers,
191
+ )
192
+ extra.foreach { case (k, v) => fopts.put(k, v) }
193
+ jmap("secrets" -> fopts)
194
+ }
195
+
196
+ private def memchain(values: (String, Object)*): JList[Object] =
197
+ jlist(jmap("kind" -> "memory", "values" -> jmap(values*)))
198
+
199
+ private def secretsFeatureOf(client: ProjectNameSDK): SecretsFeature = {
200
+ val it = client.features.iterator()
201
+ while (it.hasNext) it.next() match {
202
+ case sf: SecretsFeature => return sf
203
+ case _ =>
204
+ }
205
+ null
206
+ }
207
+
208
+ // Build the client and ADOPT the feature via `extend` ONLY when the
209
+ // generated config did not already install it - when this SDK was
210
+ // generated with `secrets` model-active the ordinary factory path builds
211
+ // the instance, and adding a second via extend would DOUBLE the feature:
212
+ // two transport wraps, two resolutions, and a token purchase the
213
+ // assertions could not account for. (go's withSecrets and py's
214
+ // _has_feature guard the same way.)
215
+ private def withSecrets(build: Boolean => ProjectNameSDK): ProjectNameSDK = {
216
+ val client = build(false)
217
+ if (null == secretsFeatureOf(client)) build(true) else client
218
+ }
219
+
220
+ private def secretsClient(w: Wire, extra: (String, Object)*): ProjectNameSDK =
221
+ withSecrets { extend =>
222
+ val opts = sdkopts(w, extra*)
223
+ if (extend) opts.put("extend", jlist(new SecretsFeature()))
224
+ new ProjectNameSDK(opts)
225
+ }
226
+
227
+ private def testModeClient(w: Wire, extra: (String, Object)*): ProjectNameSDK =
228
+ withSecrets { extend =>
229
+ val opts = sdkopts(w, extra*)
230
+ if (extend) opts.put("extend", jlist(new SecretsFeature()))
231
+ ProjectNameSDK.testSDK(null, opts)
232
+ }
233
+
234
+ // ---- driving real entity operations --------------------------------------
235
+ //
236
+ // Entity names are unknown to a TEMPLATE, so the accessors are found by
237
+ // SHAPE: a one-argument method taking a Map and returning an SdkEntity is
238
+ // what MainEntity emits for every entity. Each op's own outcome is
239
+ // irrelevant (no seeded data, a scripted response); an op the API does not
240
+ // define fails before it reaches the transport, which is why several may
241
+ // need driving.
242
+
243
+ private def entities(client: ProjectNameSDK): List[SdkEntity] = {
244
+ val out = ListBuffer.empty[SdkEntity]
245
+ for (m <- client.getClass.getMethods) {
246
+ if (1 == m.getParameterCount &&
247
+ classOf[JMap[_, _]].isAssignableFrom(m.getParameterTypes()(0)) &&
248
+ classOf[SdkEntity].isAssignableFrom(m.getReturnType)) {
249
+ try m.invoke(client, Array[Object](null)*) match {
250
+ case e: SdkEntity => out += e
251
+ case _ =>
252
+ }
253
+ catch { case _: Throwable => }
254
+ }
255
+ }
256
+ out.toList
257
+ }
258
+
259
+ // Drive entity ops until `stop` reports the state the case is waiting for.
260
+ // Returns the last error thrown by an op, which is where a fail-closed
261
+ // refusal surfaces on the entity path.
262
+ private def driveUntil(client: ProjectNameSDK, stop: () => Boolean): (Boolean, String) = {
263
+ var lasterr = ""
264
+ var done = false
265
+ // A plain while, not a for-comprehension: a `return` out of a
266
+ // for-comprehension is a NON-LOCAL return, which scala 3 has deprecated.
267
+ val ops = entities(client).flatMap(ent => List(() => ent.list(null, null), () => ent.load(null, null)))
268
+ var index = 0
269
+ while (!done && index < ops.length) {
270
+ try ops(index)()
271
+ catch { case err: Throwable => lasterr = errtext(err) }
272
+ if (stop()) done = true
273
+ index += 1
274
+ }
275
+ (done, lasterr)
276
+ }
277
+
278
+ // An op's failure, with its causes: an SdkError names the operation and
279
+ // carries the underlying refusal beneath it.
280
+ private def errtext(err: Throwable): String = {
281
+ val out = new StringBuilder()
282
+ var cur: Throwable = err
283
+ var depth = 0
284
+ while (cur != null && depth < 8) {
285
+ out.append(String.valueOf(cur.getMessage)).append(" | ")
286
+ cur = cur.getCause
287
+ depth += 1
288
+ }
289
+ out.toString
290
+ }
291
+
292
+ // Drive until ONE request reaches the recorder.
293
+ private def driveOneCall(client: ProjectNameSDK, w: Wire): Boolean = {
294
+ val before = w.api().length
295
+ driveUntil(client, () => before < w.api().length)._1
296
+ }
297
+
298
+ // ---- providers written in code -------------------------------------------
299
+
300
+ final class CodeProvider(
301
+ val answer: String => Option[String],
302
+ val label: String = "custom",
303
+ ) extends com.voxgig.sekreto.Provider {
304
+ val asked = new ArrayList[String]()
305
+ override def lookup(name: String): Option[String] = {
306
+ asked.add(name)
307
+ answer(name)
308
+ }
309
+ override def describe(): String = label + ":test"
310
+ }
311
+
312
+ private def broken(): CodeProvider =
313
+ new CodeProvider(_ => throw new com.voxgig.sekreto.SekretoError("vault unreachable"), "broken")
314
+
315
+ private def working(token: String): CodeProvider =
316
+ new CodeProvider(name => if ("apikey" == name) Some(token) else None, "working")
317
+
318
+ // =========================================================================
319
+ // The feature-inactive baseline: bit-identical behaviour.
320
+
321
+ private def testInactive(): Unit = {
322
+ val client = ProjectNameSDK.testSDK(null, jmap("apikey" -> "OPTKEY01"))
323
+ val fetchdef = client.prepare(jmap("path" -> "/"))
324
+ val headers = fetchdef.get("headers").asInstanceOf[JMap[String, Object]]
325
+ credentialIs("inactive.apikey", headers.get("authorization").asInstanceOf[String], "OPTKEY01")
326
+
327
+ check("inactive.nofeature", null == secretsFeatureOf(client),
328
+ "no model activation and no extend: the feature must not be installed")
329
+
330
+ val bare = ProjectNameSDK.testSDK(null, null)
331
+ val bareheaders = bare.prepare(jmap("path" -> "/"))
332
+ .get("headers").asInstanceOf[JMap[String, Object]]
333
+ check("inactive.noapikey", !bareheaders.containsKey("authorization"),
334
+ "unexpected authorization header: " + bareheaders.get("authorization"))
335
+ }
336
+
337
+ // =========================================================================
338
+ // The chain, driven through real entity operations.
339
+
340
+ private def testOptionWins(): Unit = {
341
+ val w = new Wire()
342
+ val client = secretsClient(w,
343
+ "apikey" -> "OPTKEY01",
344
+ "feature" -> secretsOpts(memchain("APIKEY" -> "CHAINKEY01")))
345
+
346
+ check("chain.optionwins.drive", driveOneCall(client, w), "no entity op reached the transport")
347
+ if (w.api().nonEmpty) {
348
+ credentialIs("chain.optionwins", w.authof(w.api().head), "OPTKEY01")
349
+ }
350
+
351
+ // The explicit option is a real STORE, not a special case: a directed
352
+ // read names it like any other.
353
+ val sf = secretsFeatureOf(client)
354
+ check("chain.optionwins.feature", null != sf, "the extend seam did not install the feature")
355
+ if (null != sf && null != sf.sekreto()) {
356
+ eqs("chain.optionwins.store", "OPTKEY01",
357
+ sf.sekreto().tryfrom("options", "apikey").getOrElse(""))
358
+ }
359
+ }
360
+
361
+ private def testOmittedDefers(): Unit = {
362
+ val w = new Wire()
363
+ val client = secretsClient(w,
364
+ "feature" -> secretsOpts(memchain("APIKEY" -> "CHAINKEY02")))
365
+
366
+ // Before any op, nothing has been resolved.
367
+ eqs("chain.omitted.unresolved", "", secretsFeatureOf(client).credential())
368
+
369
+ check("chain.omitted.drive", driveOneCall(client, w), "no entity op reached the transport")
370
+ if (w.api().nonEmpty) credentialIs("chain.omitted", w.authof(w.api().head), "CHAINKEY02")
371
+
372
+ // Resolution happens AT THE TRANSPORT - the one seam every wire path
373
+ // crosses - so the credential is on the wire, not merely resolved. It is
374
+ // held in FEATURE STATE; the options map is never mutated, so it stays
375
+ // safe to read from every concurrent operation.
376
+ eqs("chain.omitted.state", "CHAINKEY02", secretsFeatureOf(client).credential())
377
+ eqs("chain.omitted.optionsfrozen", "",
378
+ client.optionsMap().get("apikey") match { case s: String => s; case _ => "" })
379
+ }
380
+
381
+ private def testCustomProvider(): Unit = {
382
+ val w = new Wire()
383
+ val prov = working("CUSTOM01")
384
+ val client = secretsClient(w, "feature" -> secretsOpts(jlist(prov)))
385
+
386
+ check("chain.custom.drive", driveOneCall(client, w), "no entity op reached the transport")
387
+ if (w.api().nonEmpty) credentialIs("chain.custom", w.authof(w.api().head), "CUSTOM01")
388
+ check("chain.custom.asked", !prov.asked.isEmpty && "apikey" == prov.asked.get(0),
389
+ "the custom provider was asked " + prov.asked)
390
+ }
391
+
392
+ // A spec given as a plain MAP - what a JSON config supplies. The scala
393
+ // sekreto port has no map-taking SpecOf, so SecretsFeature converts the map
394
+ // to plugin's value model itself; a shape that converter mishandles would
395
+ // be lost in silence, which is why it is pinned here.
396
+ private def testSpecFromMap(): Unit = {
397
+ val w = new Wire()
398
+ val client = secretsClient(w,
399
+ "feature" -> secretsOpts(jlist(jmap(
400
+ "kind" -> "memory",
401
+ "name" -> "config",
402
+ "prefix" -> "CFG_",
403
+ "values" -> jmap("CFG_APIKEY" -> "MAPPED01"),
404
+ ))))
405
+
406
+ check("chain.specmap.drive", driveOneCall(client, w), "no entity op reached the transport")
407
+ if (w.api().nonEmpty) credentialIs("chain.specmap", w.authof(w.api().head), "MAPPED01")
408
+
409
+ // Every field crossed: `name` made the store addressable, `prefix`
410
+ // reached the provider (without it the value would not have been found).
411
+ val sf = secretsFeatureOf(client)
412
+ if (null != sf && null != sf.sekreto()) {
413
+ eqs("chain.specmap.store", "MAPPED01",
414
+ sf.sekreto().tryfrom("config", "apikey").getOrElse(""))
415
+ }
416
+ }
417
+
418
+ private def testMissLeavesHeaderOff(): Unit = {
419
+ val w = new Wire()
420
+ val client = secretsClient(w, "feature" -> secretsOpts(memchain("OTHER" -> "x")))
421
+
422
+ check("chain.miss.drive", driveOneCall(client, w), "no entity op reached the transport")
423
+ if (w.api().nonEmpty) {
424
+ check("chain.miss", !w.hasauth(w.api().head),
425
+ "a chain MISS must fall through to an unauthenticated request, got header \"" +
426
+ w.authof(w.api().head) + "\"")
427
+ }
428
+ }
429
+
430
+ private def testAuthNullSuppresses(): Unit = {
431
+ val w = new Wire()
432
+ val client = secretsClient(w,
433
+ "auth" -> null,
434
+ "apikey" -> "OPTKEY01",
435
+ "feature" -> secretsOpts(memchain("APIKEY" -> "CHAINKEY03")))
436
+
437
+ check("chain.authnull.drive", driveOneCall(client, w), "no entity op reached the transport")
438
+ if (w.api().nonEmpty) {
439
+ check("chain.authnull", !w.hasauth(w.api().head),
440
+ "auth null must suppress the credential, got header \"" + w.authof(w.api().head) + "\"")
441
+ }
442
+
443
+ // The suppression survives option validation rather than being replaced
444
+ // by the optspec's default auth map.
445
+ val opts = client.optionsMap()
446
+ check("chain.authnull.survives", opts.containsKey("auth") && null == opts.get("auth"),
447
+ "options.auth must stay a present null, got " + opts.get("auth"))
448
+ }
449
+
450
+ // =========================================================================
451
+ // FAIL CLOSED. A provider MISS falls through; a provider ERROR must fail
452
+ // the operation. Conflating them turns a broken vault into a silent
453
+ // unauthenticated request.
454
+
455
+ private def testFailClosedEntity(): Unit = {
456
+ val prov = broken()
457
+ val w = new Wire()
458
+ val client = secretsClient(w, "feature" -> secretsOpts(jlist(prov)))
459
+
460
+ // THE RULE, asserted first so a regression reports the leak itself.
461
+ val (_, err) = driveUntil(client, () => !prov.asked.isEmpty)
462
+ check("failclosed.entity.asked", !prov.asked.isEmpty,
463
+ "the chain was never consulted - this case proves nothing")
464
+ eqi("failclosed.entity.silent " + w.report(), 0, w.api().length)
465
+ check("failclosed.entity.message", err.contains("vault unreachable"),
466
+ "the operation must fail with the PROVIDER'S OWN error, got: " + err)
467
+
468
+ // CONTROL, which makes that zero mean REFUSED rather than UNWIRED: the
469
+ // same construction with a WORKING provider must reach the same
470
+ // transport, once, carrying the credential.
471
+ val cw = new Wire()
472
+ val control = secretsClient(cw, "feature" -> secretsOpts(jlist(working("RAWKEY01"))))
473
+ check("failclosed.entity.control.drive", driveOneCall(control, cw),
474
+ "the control request never reached system.fetch, so this case cannot " +
475
+ "observe a request going out at all")
476
+ eqi("failclosed.entity.control.count", 1, cw.api().length)
477
+ if (cw.api().nonEmpty) {
478
+ credentialIs("failclosed.entity.control.auth", cw.authof(cw.api().head), "RAWKEY01")
479
+ }
480
+ }
481
+
482
+ // THE RAW PATHS, which run NO feature hooks at all. If resolution lived in
483
+ // a PreSpec hook these would send an unauthenticated request and never
484
+ // notice; they are covered because resolution is at the TRANSPORT.
485
+ private def testFailClosedRaw(): Unit = {
486
+ val allow = jmap("op" -> "direct,graphql")
487
+
488
+ // ---- direct()
489
+ val w = new Wire()
490
+ val client = secretsClient(w,
491
+ "allow" -> allow,
492
+ "feature" -> secretsOpts(jlist(broken())))
493
+ val res = client.direct(jmap("path" -> "/thing"))
494
+
495
+ eqi("failclosed.direct.silent " + w.report(), 0, w.api().length)
496
+ check("failclosed.direct.refused", java.lang.Boolean.FALSE == res.get("ok"),
497
+ "a broken chain must refuse the raw path fail-closed, got " + res)
498
+ check("failclosed.direct.message",
499
+ errtext(res.get("err").asInstanceOf[Throwable]).contains("vault unreachable"),
500
+ "direct must report the PROVIDER'S OWN error, got: " + res.get("err"))
501
+
502
+ // ---- graphql()
503
+ val gw = new Wire()
504
+ val gclient = secretsClient(gw,
505
+ "allow" -> allow,
506
+ "feature" -> secretsOpts(jlist(broken())))
507
+ val gres = gclient.graphql("{ thing }", null, null)
508
+
509
+ eqi("failclosed.graphql.silent " + gw.report(), 0, gw.api().length)
510
+ check("failclosed.graphql.refused", java.lang.Boolean.FALSE == gres.get("ok"),
511
+ "a broken chain must refuse graphql fail-closed, got " + gres)
512
+ check("failclosed.graphql.message",
513
+ errtext(gres.get("err").asInstanceOf[Throwable]).contains("vault unreachable"),
514
+ "graphql must report the PROVIDER'S OWN error, got: " + gres.get("err"))
515
+
516
+ // ---- CONTROL: the same construction, a working provider, one call each,
517
+ // carrying the credential. Without this the two zeros above would also
518
+ // hold for an SDK that never wires system.fetch at all.
519
+ val cw = new Wire()
520
+ val control = secretsClient(cw,
521
+ "allow" -> allow,
522
+ "feature" -> secretsOpts(jlist(working("RAWKEY02"))))
523
+
524
+ val ok = control.direct(jmap("path" -> "/thing"))
525
+ check("failclosed.direct.control.ok", java.lang.Boolean.TRUE == ok.get("ok"),
526
+ "the control direct() failed: " + ok)
527
+ eqi("failclosed.direct.control.count", 1, cw.api().length)
528
+ if (cw.api().nonEmpty) {
529
+ credentialIs("failclosed.direct.control.auth", cw.authof(cw.api().head), "RAWKEY02")
530
+ }
531
+
532
+ val gcw = new Wire()
533
+ val gcontrol = secretsClient(gcw,
534
+ "allow" -> allow,
535
+ "feature" -> secretsOpts(jlist(working("RAWKEY03"))))
536
+ gcontrol.graphql("{ thing }", null, null)
537
+ eqi("failclosed.graphql.control.count", 1, gcw.api().length)
538
+ if (gcw.api().nonEmpty) {
539
+ credentialIs("failclosed.graphql.control.auth", gcw.authof(gcw.api().head), "RAWKEY03")
540
+ }
541
+ }
542
+
543
+ // A chain that will not BUILD at all - an unknown provider kind, the shape
544
+ // a typo or a plugin group the model did not select produces. Init cannot
545
+ // fail construction the way ts's throwing init can, so the refusal has to
546
+ // come from the transport gate; a feature that skipped wrapping on a failed
547
+ // init would send every request unauthenticated instead, and no other case
548
+ // here would notice.
549
+ private def testFailClosedUnbuildableChain(): Unit = {
550
+ val w = new Wire()
551
+ val client = secretsClient(w,
552
+ "allow" -> jmap("op" -> "direct"),
553
+ "feature" -> secretsOpts(jlist(jmap("kind" -> "nosuchkind"))))
554
+
555
+ val res = client.direct(jmap("path" -> "/thing"))
556
+
557
+ eqi("failclosed.unbuildable.silent " + w.report(), 0, w.api().length)
558
+ check("failclosed.unbuildable.refused", java.lang.Boolean.FALSE == res.get("ok"),
559
+ "a chain that would not build must refuse, got " + res)
560
+ check("failclosed.unbuildable.message",
561
+ errtext(res.get("err").asInstanceOf[Throwable]).contains("nosuchkind"),
562
+ "the refusal must name the unknown kind, got: " + res.get("err"))
563
+ }
564
+
565
+ // A failed resolution is NEVER kept: a transient vault outage must not
566
+ // poison the client permanently.
567
+ private def testTransientRecovery(): Unit = {
568
+ var calls = 0
569
+ val prov = new CodeProvider(_ => {
570
+ calls += 1
571
+ if (1 == calls) throw new com.voxgig.sekreto.SekretoError("vault unreachable")
572
+ Some("RECOVERED01")
573
+ }, "flaky")
574
+
575
+ val w = new Wire()
576
+ val client = secretsClient(w, "feature" -> secretsOpts(jlist(prov)))
577
+
578
+ driveUntil(client, () => 0 < calls)
579
+ eqi("recovery.firstsilent", 0, w.api().length)
580
+
581
+ check("recovery.drive", driveOneCall(client, w), "the second op never reached the transport")
582
+ if (w.api().nonEmpty) credentialIs("recovery.fresh", w.authof(w.api().head), "RECOVERED01")
583
+ }
584
+
585
+ // `cache: false` is documented as "every resolve asks the chain again", and
586
+ // an uncached MISS after an earlier hit is a REVOCATION: the resolved value
587
+ // must stop going out.
588
+ private def testUncachedMissRetracts(): Unit = {
589
+ var have = true
590
+ var calls = 0
591
+ val prov = new CodeProvider(_ => {
592
+ calls += 1
593
+ if (have) Some("REVOCABLE01") else None
594
+ }, "revocable")
595
+
596
+ val w = new Wire()
597
+ val client = secretsClient(w,
598
+ "feature" -> secretsOpts(jlist(prov), "cache" -> java.lang.Boolean.FALSE))
599
+
600
+ check("uncached.drive", driveOneCall(client, w), "no entity op reached the transport")
601
+ if (w.api().nonEmpty) credentialIs("uncached.first", w.authof(w.api().head), "REVOCABLE01")
602
+
603
+ val asked = calls
604
+ have = false
605
+ check("uncached.drive2", driveOneCall(client, w), "the second op never reached the transport")
606
+ check("uncached.reasked", asked < calls,
607
+ "the chain was asked once and cached, despite cache: false")
608
+
609
+ val last = w.api().last
610
+ check("uncached.retracted", !w.hasauth(last) || "" == w.authof(last),
611
+ "after the chain reports a miss, the retracted credential must not go " +
612
+ "out; the wire saw \"" + w.authof(last) + "\"")
613
+ }
614
+
615
+ private def testSecretNameConfigurable(): Unit = {
616
+ val w = new Wire()
617
+ val client = secretsClient(w,
618
+ "feature" -> secretsOpts(memchain("API_TOKEN" -> "TOKKEY01"), "name" -> "api.token"))
619
+
620
+ check("name.drive", driveOneCall(client, w), "no entity op reached the transport")
621
+ if (w.api().nonEmpty) credentialIs("name.configurable", w.authof(w.api().head), "TOKKEY01")
622
+ }
623
+
624
+ // The live Sekreto: arbitrary secrets and redaction, the scala spelling of
625
+ // ts's sdk.secrets().
626
+ private def testSekretoIsLive(): Unit = {
627
+ val w = new Wire()
628
+ val client = secretsClient(w,
629
+ "feature" -> secretsOpts(memchain("APIKEY" -> "KEY01", "DB_PASSWORD" -> "dbpass01")))
630
+
631
+ val sek = secretsFeatureOf(client).sekreto()
632
+ check("sekreto.live", null != sek, "no live Sekreto instance")
633
+ if (null != sek) {
634
+ eqs("sekreto.get", "dbpass01", sek.get("db.password"))
635
+ eqs("sekreto.redact", "the password is [redacted], keep it safe",
636
+ sek.redact("the password is dbpass01, keep it safe"))
637
+ }
638
+ }
639
+
640
+ // Every vendored provider MODULE, and the kinds it defines. The pairing is
641
+ // the model's `plugin.<group>.def.scala` map read from the other side, and
642
+ // it is written out here on purpose: a test that asked Config for the
643
+ // mapping would be asking the thing under test.
644
+ //
645
+ // plugins/Httpjson.scala and plugins/Sigv4.scala are absent because they
646
+ // define no kind - they are the two UNGROUPED helper files that ship with
647
+ // the feature core whatever the model selects.
648
+ private val PLUGINMODULES: List[(String, List[String])] = List(
649
+ "Aws" -> List("awsparams", "awssecrets"),
650
+ "Azuresecrets" -> List("azuresecrets"),
651
+ "Boru" -> List("boru"),
652
+ "Doppler" -> List("doppler"),
653
+ "Gcpsecrets" -> List("gcpsecrets"),
654
+ "Hashicorp" -> List("hashicorp"),
655
+ "Infisical" -> List("infisical"),
656
+ "Onepassword" -> List("onepassword"),
657
+ "Secretspec" -> List("secretspec"),
658
+ )
659
+
660
+ // A kind no module defines and no model can select, for the negative
661
+ // control. Deliberately not a plausible provider name.
662
+ private val CONTROLKIND = "vocabulary-control-kind"
663
+
664
+ // Did this SDK compile plugins/<file>.scala? A scala 3 top-level `val`
665
+ // lives in the synthetic `<File>$package` class, so the classloader answers
666
+ // for the FILE - which is what the generate-time plugin trim adds or
667
+ // removes. Asked by name and not by reference: a direct mention of
668
+ // `com.voxgig.sekreto.plugins.hashicorp` would stop this file compiling in
669
+ // every tree the trim did its job on.
670
+ private def moduleShipped(file: String): Boolean =
671
+ try {
672
+ Class.forName("com.voxgig.sekreto.plugins." + file + "$package",
673
+ false, getClass.getClassLoader)
674
+ true
675
+ }
676
+ catch { case _: Throwable => false }
677
+
678
+ // Did the MODEL activate the feature in this SDK? Config's `feature` map is
679
+ // built from the model's active features alone, so the key is present only
680
+ // where an activation put it - which is exactly when the plugin trim ran.
681
+ private def secretsInConfig(): Boolean =
682
+ Config.sharedConfig().get("feature") match {
683
+ case m: JMap[_, _] => m.asInstanceOf[JMap[String, Object]].containsKey("secrets")
684
+ case _ => false
685
+ }
686
+
687
+ // THE PROVIDER VOCABULARY. Since sekreto retired its import-time registry a
688
+ // kind not passed in `plugins` is unknown to that Sekreto, so an SDK whose
689
+ // model selected plugin groups but whose Config failed to hand them over
690
+ // would compile, ship every plugin module, and refuse every one of their
691
+ // kinds at runtime while the built-in cases stayed green.
692
+ //
693
+ // THE EXPECTATION IS DERIVED FROM THE SHIPPED MODULES, NOT FROM CONFIG.
694
+ // The first cut of this read Config.featurePlugins for both sides and
695
+ // looped over it - so on a model selecting no plugin group the list was
696
+ // empty, the loop ran zero times, and deleting the whole emission from
697
+ // Config_scala left the suite green on the same score. Config is the thing
698
+ // under test; it cannot also be the oracle.
699
+ //
700
+ // The independent oracle is the generate-time plugin trim. It deletes an
701
+ // inactive group's FILES, so the set of provider modules compiled into
702
+ // this SDK records what the model selected, and Config's list has to name
703
+ // exactly their kinds - no more (a symbol the trim deleted is a build
704
+ // break) and no fewer (a module whose kind never reaches the feature is
705
+ // refused at runtime).
706
+ private def testPluginVocabulary(): Unit = {
707
+ // (1) The table below has to cover the whole vendored vocabulary, or a
708
+ // kind added upstream would be invisible to every check under it.
709
+ // KINDS.plugin is sekreto's own list, so it answers for upstream.
710
+ val tabled = PLUGINMODULES.flatMap(_._2).toSet
711
+ val untabled = com.voxgig.sekreto.KINDS.plugin.filterNot(tabled.contains)
712
+ check("vocabulary.table", untabled.isEmpty,
713
+ "sekreto ships provider kinds this test does not know about: " +
714
+ untabled.mkString(", ") + " - add them to PLUGINMODULES, and to a " +
715
+ "`plugin` group in model/feature/secrets.aon")
716
+
717
+ val w = new Wire()
718
+ val client = secretsClient(w, "feature" -> secretsOpts(memchain("APIKEY" -> "VOCAB01")))
719
+ val sek = secretsFeatureOf(client).sekreto()
720
+ check("vocabulary.live", null != sek, "no live Sekreto instance")
721
+ if (null == sek) return
722
+
723
+ // (2) CONTROL, both ways. Without these a green run below could mean
724
+ // "catalog.has says yes to anything" or "the `plugins` seam is dead", and
725
+ // on an SDK that selected no group there would be nothing else asserted
726
+ // at all. So: the catalog must be able to say NO to a kind nothing
727
+ // defines, and a definition handed to the SAME constructor parameter
728
+ // Config.featurePlugins feeds must make it say YES.
729
+ check("vocabulary.control.unknown", !sek.catalog.has(CONTROLKIND),
730
+ "the catalog claims to know \"" + CONTROLKIND + "\", which nothing " +
731
+ "defines - catalog.has cannot witness anything")
732
+
733
+ val probe = new com.voxgig.sekreto.Sekreto(
734
+ plugins = List(com.voxgig.sekreto.providerplugin(
735
+ CONTROLKIND, _ => new CodeProvider(_ => None, CONTROLKIND))))
736
+ check("vocabulary.control.handedin", probe.catalog.has(CONTROLKIND),
737
+ "a definition passed in `plugins` did not reach the catalog - the seam " +
738
+ "Config.featurePlugins feeds is dead, so every check here is vacuous")
739
+
740
+ // (3) What Config actually emitted.
741
+ val names = ListBuffer.empty[String]
742
+ for (one <- Config.featurePlugins("secrets")) one match {
743
+ case d: voxgig.plugin.Definition => names += d.name
744
+ case other => fail("vocabulary.type", "not a plugin definition: " + other)
745
+ }
746
+ for (name <- names) {
747
+ check("vocabulary." + name, sek.catalog.has(name),
748
+ "the model selected the " + name + " plugin, but this SDK's Sekreto " +
749
+ "does not know that kind - Config.featurePlugins is not reaching the feature")
750
+ check("vocabulary.known." + name, tabled.contains(name),
751
+ "Config declares a kind no vendored module defines: " + name)
752
+ }
753
+
754
+ // (4) THE SEAM. Both halves of the model are asserted, because the trim
755
+ // that produces the oracle has a half for each: Main_scala excludes an
756
+ // ACTIVE feature's inactive groups, and every group of a feature that is
757
+ // itself off. Each branch names its own failure - a mismatch means
758
+ // something different on either side.
759
+ val shipped = PLUGINMODULES.filter(one => moduleShipped(one._1))
760
+ val here = if (shipped.isEmpty) "(none)" else shipped.map(_._1).mkString(", ")
761
+ val got = names.toList.sorted.mkString(",")
762
+
763
+ if (secretsInConfig()) {
764
+ eqs("vocabulary.matchesmodules", shipped.flatMap(_._2).sorted.mkString(","), got,
765
+ "this SDK compiled the provider modules " + here + ", so " +
766
+ "Config.featurePlugins must name exactly their kinds - it is the " +
767
+ "model's plugin selection that put those modules here")
768
+ }
769
+ else {
770
+ // The model never activated secrets, so it selected no provider kind.
771
+ eqs("vocabulary.off.notrimmed", "", shipped.map(_._1).mkString(","),
772
+ "this SDK's model left secrets off, so no provider client should have " +
773
+ "reached it - Main_scala's inactive-feature plugin trim did not run")
774
+ eqs("vocabulary.off.nodefs", "", got,
775
+ "this SDK's model left secrets off, so Config.featurePlugins must " +
776
+ "declare nothing for it")
777
+ }
778
+ }
779
+
780
+ // The `env` built-in is LIVE. A JVM cannot set its own environment, so this
781
+ // reads a variable that is already there rather than staging one.
782
+ private def testEnvBuiltin(): Unit = {
783
+ val path = System.getenv("PATH")
784
+ if (null == path || path.isEmpty) return
785
+
786
+ val w = new Wire()
787
+ val client = secretsClient(w,
788
+ "feature" -> secretsOpts(jlist(jmap("kind" -> "env")), "name" -> "path"))
789
+ val sek = secretsFeatureOf(client).sekreto()
790
+ eqs("env.builtin", path, if (null == sek) "" else sek.tryget("path").getOrElse(""))
791
+ }
792
+
793
+ // =========================================================================
794
+ // The access-token exchange.
795
+
796
+ private def exchangeOpts(extra: (String, Object)*): JMap[String, Object] = {
797
+ val x = jmap("active" -> java.lang.Boolean.TRUE)
798
+ extra.foreach { case (k, v) => x.put(k, v) }
799
+ secretsOpts(
800
+ memchain("REFRESH_TOKEN" -> "REFRESH01"),
801
+ "name" -> "refresh_token",
802
+ "exchange" -> x)
803
+ }
804
+
805
+ private def testExchangeBuysAndRetries(): Unit = {
806
+ val w = new Wire()
807
+ // First API call is refused, the retry succeeds.
808
+ w.apistatus = List(401, 200)
809
+
810
+ val client = secretsClient(w, "allow" -> jmap("op" -> "direct"), "feature" -> exchangeOpts())
811
+ val res = client.direct(jmap("path" -> "/thing"))
812
+
813
+ eqi("exchange.purchases", 2, w.token().length)
814
+ eqi("exchange.retried", 2, w.api().length)
815
+ if (2 <= w.api().length) {
816
+ credentialIs("exchange.first", w.authof(w.api()(0)), "ACCESS01")
817
+ // The retry must carry the NEW token, not the spent one.
818
+ credentialIs("exchange.retry", w.authof(w.api()(1)), "ACCESS02")
819
+ }
820
+ check("exchange.result", java.lang.Boolean.TRUE == res.get("ok"),
821
+ "the caller sees the successful retry, got " + res)
822
+ }
823
+
824
+ private def testExchangeOnePurchaseManyRequests(): Unit = {
825
+ val w = new Wire()
826
+ val client = secretsClient(w, "allow" -> jmap("op" -> "direct"), "feature" -> exchangeOpts())
827
+
828
+ client.direct(jmap("path" -> "/one"))
829
+ client.direct(jmap("path" -> "/two"))
830
+ client.direct(jmap("path" -> "/three"))
831
+
832
+ eqi("exchange.onepurchase", 1, w.token().length)
833
+ eqi("exchange.threecalls", 3, w.api().length)
834
+ }
835
+
836
+ // The body is MARSHALLED, never concatenated: a refresh token carrying a
837
+ // quote, backslash or newline must arrive as that literal value.
838
+ private def testExchangeBodyIsJson(): Unit = {
839
+ val tricky = "re\"fresh\\to\nken"
840
+ val w = new Wire()
841
+ val client = secretsClient(w,
842
+ "allow" -> jmap("op" -> "direct"),
843
+ "feature" -> exchangeOpts("refresh" -> tricky))
844
+
845
+ client.direct(jmap("path" -> "/thing"))
846
+
847
+ check("exchange.body.purchased", 1 <= w.token().length, "no token purchase was made")
848
+ if (w.token().nonEmpty) {
849
+ val body = w.token().head.get("body") match { case s: String => s; case _ => "" }
850
+ val parsed = Json.parse(body) match {
851
+ case m: JMap[_, _] => m.asInstanceOf[JMap[String, Object]]
852
+ case _ => null
853
+ }
854
+ check("exchange.body.json", null != parsed,
855
+ "the exchange body must be valid JSON, got: " + body)
856
+ if (null != parsed) {
857
+ eqs("exchange.body.literal", tricky,
858
+ parsed.get("refresh_token") match { case s: String => s; case _ => "" })
859
+ }
860
+ }
861
+ }
862
+
863
+ // An explicit exchange.refresh takes the first seat in the chain, so it
864
+ // wins by sekreto's own first-hit rule.
865
+ private def testExchangeExplicitRefreshWins(): Unit = {
866
+ val w = new Wire()
867
+ val client = secretsClient(w,
868
+ "allow" -> jmap("op" -> "direct"),
869
+ "feature" -> exchangeOpts("refresh" -> "EXPLICIT01"))
870
+
871
+ client.direct(jmap("path" -> "/thing"))
872
+
873
+ if (w.token().nonEmpty) {
874
+ val body = w.token().head.get("body") match { case s: String => s; case _ => "" }
875
+ check("exchange.explicitrefresh", body.contains("EXPLICIT01"),
876
+ "an explicit exchange.refresh must win over the chain, body was: " + body)
877
+ } else {
878
+ fail("exchange.explicitrefresh", "no token purchase was made")
879
+ }
880
+ }
881
+
882
+ // A refusal of a deliberately unauthenticated request is not an expired
883
+ // token: buying one and retrying would transmit exactly the credential the
884
+ // caller suppressed.
885
+ private def testExchangeAuthNullNotRetried(): Unit = {
886
+ val w = new Wire()
887
+ w.apistatus = List(401)
888
+
889
+ val client = secretsClient(w,
890
+ "auth" -> null,
891
+ "allow" -> jmap("op" -> "direct"),
892
+ "feature" -> exchangeOpts())
893
+
894
+ client.direct(jmap("path" -> "/thing"))
895
+
896
+ eqi("exchange.authnull.noretry", 1, w.api().length)
897
+ if (w.api().nonEmpty) {
898
+ check("exchange.authnull.nocred", !w.hasauth(w.api().head),
899
+ "no credential may be sent when auth is suppressed, got \"" +
900
+ w.authof(w.api().head) + "\"")
901
+ }
902
+ }
903
+
904
+ // No refresh token anywhere is an ERROR, not an unauthenticated call.
905
+ private def testExchangeNoRefresh(): Unit = {
906
+ val w = new Wire()
907
+ val client = secretsClient(w,
908
+ "allow" -> jmap("op" -> "direct"),
909
+ "feature" -> secretsOpts(
910
+ memchain("SOMETHINGELSE" -> "x"),
911
+ "name" -> "refresh_token",
912
+ "exchange" -> jmap("active" -> java.lang.Boolean.TRUE)))
913
+
914
+ val res = client.direct(jmap("path" -> "/thing"))
915
+
916
+ eqi("exchange.norefresh.silent", 0, w.api().length)
917
+ check("exchange.norefresh.refused", java.lang.Boolean.FALSE == res.get("ok"),
918
+ "an empty chain must refuse rather than send unauthenticated, got " + res)
919
+ }
920
+
921
+ // TEST MODE BUYS NOTHING and needs no token endpoint.
922
+ private def testExchangeTestMode(): Unit = {
923
+ val w = new Wire()
924
+ val client = testModeClient(w, "feature" -> exchangeOpts())
925
+
926
+ driveUntil(client, () => "" != secretsFeatureOf(client).credential())
927
+
928
+ eqi("exchange.testmode.noio", 0, w.calls.size())
929
+ eqs("exchange.testmode.token", "test-access_token", secretsFeatureOf(client).credential())
930
+ }
931
+
932
+ // =========================================================================
933
+
934
+ def main(args: Array[String]): Unit = {
935
+ val cases: List[(String, () => Unit)] = List(
936
+ "inactive" -> testInactive,
937
+ "optionWins" -> testOptionWins,
938
+ "omittedDefers" -> testOmittedDefers,
939
+ "customProvider" -> testCustomProvider,
940
+ "specFromMap" -> testSpecFromMap,
941
+ "missLeavesHeaderOff" -> testMissLeavesHeaderOff,
942
+ "authNullSuppresses" -> testAuthNullSuppresses,
943
+ "failClosedEntity" -> testFailClosedEntity,
944
+ "failClosedRaw" -> testFailClosedRaw,
945
+ "failClosedUnbuildableChain" -> testFailClosedUnbuildableChain,
946
+ "transientRecovery" -> testTransientRecovery,
947
+ "uncachedMissRetracts" -> testUncachedMissRetracts,
948
+ "secretNameConfigurable" -> testSecretNameConfigurable,
949
+ "sekretoIsLive" -> testSekretoIsLive,
950
+ "pluginVocabulary" -> testPluginVocabulary,
951
+ "envBuiltin" -> testEnvBuiltin,
952
+ "exchangeBuysAndRetries" -> testExchangeBuysAndRetries,
953
+ "exchangeOnePurchaseManyRequests" -> testExchangeOnePurchaseManyRequests,
954
+ "exchangeBodyIsJson" -> testExchangeBodyIsJson,
955
+ "exchangeExplicitRefreshWins" -> testExchangeExplicitRefreshWins,
956
+ "exchangeAuthNullNotRetried" -> testExchangeAuthNullNotRetried,
957
+ "exchangeNoRefresh" -> testExchangeNoRefresh,
958
+ "exchangeTestMode" -> testExchangeTestMode,
959
+ )
960
+
961
+ for ((name, body) <- cases) {
962
+ try body()
963
+ catch { case err: Throwable => fail(name, "threw " + errtext(err)) }
964
+ }
965
+
966
+ println("SECRETS PASS " + npass + " FAIL " + failures.size())
967
+ val it = failures.iterator()
968
+ while (it.hasNext) println(" FAIL " + it.next())
969
+ if (!failures.isEmpty) System.exit(1)
970
+ }
971
+ }