@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,1148 @@
1
+ package KOTLINPACKAGE.sdktest
2
+
3
+ // Behavioural tests for the secrets feature (vendored @voxgig/sekreto) -
4
+ // the kotlin port of tm/ts/test/feature/secrets/Secrets.test.ts.
5
+ //
6
+ // The contract under test: the `apikey` OPTION keeps its exact old meaning
7
+ // and always wins, because SecretsFeature places it FIRST in the provider
8
+ // chain (a `memory` store named `options`) - explicit-beats-lookup falls
9
+ // out of sekreto's first-hit rule rather than from special-case logic.
10
+ // With the feature inactive nothing changes at all. With it active and the
11
+ // option unset, the chain (a memory store, a custom provider, a vault)
12
+ // supplies the credential instead.
13
+ //
14
+ // This file lives in the test `feature/` container on purpose: `target add`
15
+ // trims it, along with the feature source and the vendored library, for a
16
+ // project whose model does not select `secrets`.
17
+ //
18
+ // THE CLIENT IS LIVE AND THE TRANSPORT IS THE THING COUNTED. Every wire
19
+ // assertion here runs against a real client whose `system.fetch` is the
20
+ // recorder - never `testSDK`, whose test feature REPLACES the fetcher with
21
+ // its own in-memory mock and would leave a `system.fetch` counter at zero
22
+ // for a healthy SDK carrying no secrets feature at all. An assertion that
23
+ // cannot fail pins no rule, so each fail-closed case additionally carries a
24
+ // CONTROL leg: the same construction with a WORKING provider must reach the
25
+ // same recorder exactly once, carrying the credential. Only then does a
26
+ // zero from the broken provider mean REFUSED rather than UNWIRED. And the
27
+ // refusal is matched on the PROVIDER'S OWN message, so an unrelated failure
28
+ // (a missing route, a blocked op) cannot stand in for fail-closed.
29
+ //
30
+ // The feature is CONSTRUCTED DIRECTLY and adopted through the `extend`
31
+ // option ONLY when the generated Config did not already install it, so
32
+ // these tests hold in any generated tree - and never double the feature
33
+ // (two transport wraps, two purchases) in one that did.
34
+ //
35
+ // NO ENVIRONMENT VARIABLES. The JVM has no supported way to set one for the
36
+ // current process, so the ts/go/js suites' `env` chains become `memory`
37
+ // chains and custom Provider objects here. The rule under test - the chain
38
+ // answers when the option does not - is identical either way.
39
+
40
+ import java.lang.reflect.Method
41
+ import java.util.concurrent.CountDownLatch
42
+ import java.util.concurrent.TimeUnit
43
+ import java.util.function.BiFunction
44
+ import java.util.function.Supplier
45
+
46
+ import org.junit.jupiter.api.Assertions.assertEquals
47
+ import org.junit.jupiter.api.Assertions.assertFalse
48
+ import org.junit.jupiter.api.Assertions.assertNotNull
49
+ import org.junit.jupiter.api.Assertions.assertNull
50
+ import org.junit.jupiter.api.Assertions.assertTrue
51
+ import org.junit.jupiter.api.Assertions.fail
52
+ import org.junit.jupiter.api.Test
53
+
54
+ import KOTLINPACKAGE.core.Config
55
+ import KOTLINPACKAGE.core.ProjectNameSDK
56
+ import KOTLINPACKAGE.core.SdkEntity
57
+ import KOTLINPACKAGE.feature.SecretsFeature
58
+ import KOTLINPACKAGE.feature.secrets.sekreto.Provider
59
+ import KOTLINPACKAGE.feature.secrets.sekreto.ProviderSpec
60
+
61
+ @Suppress("UNCHECKED_CAST")
62
+ class SecretsTest {
63
+
64
+ // -------------------------------------------------------------------
65
+ // The recording transport: system.fetch for a LIVE client, scripting one
66
+ // status per API call (the last repeating) and a token endpoint for the
67
+ // exchange tests.
68
+
69
+ class Call(
70
+ val url: String,
71
+ val auth: String,
72
+ val hasAuth: Boolean,
73
+ val body: String,
74
+ )
75
+
76
+ class Wire {
77
+ private val lock = Object()
78
+ private val recorded = mutableListOf<Call>()
79
+
80
+ var apistatus: List<Int> = listOf(200)
81
+ var tokens: List<String> = listOf("ACCESS01", "ACCESS02", "ACCESS03")
82
+ var tokenpath: String = "auth/token"
83
+ var respfield: String = "access_token"
84
+
85
+ // A token endpoint that starts refusing after `tokenok` successful
86
+ // purchases (0 refuses the first).
87
+ var tokenok: Int = Int.MAX_VALUE
88
+
89
+ private var issued = 0
90
+ private var apicalls = 0
91
+
92
+ // A java.util.function.BiFunction, not a bare kotlin lambda: that is the
93
+ // shape utility/Fetcher.kt dispatches on, and a Function2 would be
94
+ // silently ignored.
95
+ val fetch: BiFunction<String, MutableMap<String, Any?>, Any?> =
96
+ BiFunction { url, fetchdef -> serve(url, fetchdef) }
97
+
98
+ private fun serve(url: String, fetchdef: MutableMap<String, Any?>): Any? {
99
+ synchronized(lock) {
100
+ // The header value is SNAPSHOT here, not referenced: the retry path
101
+ // rewrites the same headers map in place, so a stored reference
102
+ // would make every earlier record show the newest token.
103
+ var auth = ""
104
+ var hasAuth = false
105
+ val headers = fetchdef["headers"]
106
+ if (headers is Map<*, *>) {
107
+ for (e in headers.entries) {
108
+ if ("authorization".equals(e.key.toString(), ignoreCase = true)) {
109
+ hasAuth = true
110
+ auth = e.value?.toString() ?: ""
111
+ }
112
+ }
113
+ }
114
+ val body = fetchdef["body"]
115
+ recorded.add(Call(url, auth, hasAuth, if (body is String) body else ""))
116
+
117
+ if (url.endsWith("/$tokenpath")) {
118
+ if (issued >= tokenok) {
119
+ issued++
120
+ return response(500, linkedMapOf<String, Any?>("error" to "nope"))
121
+ }
122
+ val token = tokens[minOf(issued, tokens.size - 1)]
123
+ issued++
124
+ return response(200, linkedMapOf<String, Any?>(respfield to token))
125
+ }
126
+
127
+ val status = apistatus[minOf(apicalls, apistatus.size - 1)]
128
+ apicalls++
129
+ return response(status, linkedMapOf<String, Any?>("ok" to (status < 400)))
130
+ }
131
+ }
132
+
133
+ private fun response(status: Int, payload: Any?): MutableMap<String, Any?> =
134
+ linkedMapOf(
135
+ "status" to status,
136
+ "statusText" to if (status < 400) "OK" else "ERR",
137
+ "headers" to linkedMapOf<String, Any?>(),
138
+ "json" to Supplier<Any?> { payload },
139
+ )
140
+
141
+ fun calls(): List<Call> = synchronized(lock) { recorded.toList() }
142
+
143
+ /** The recorded calls that did NOT go to the token endpoint. */
144
+ fun api(): List<Call> = calls().filter { !it.url.endsWith("/$tokenpath") }
145
+
146
+ fun token(): List<Call> = calls().filter { it.url.endsWith("/$tokenpath") }
147
+
148
+ /** What went out, for a message that names the leak rather than counting it. */
149
+ fun wire(): String = calls().joinToString(", ") { it.url + " auth=" + it.auth }
150
+ }
151
+
152
+ // -------------------------------------------------------------------
153
+ // Support.
154
+
155
+ companion object {
156
+ const val BASE = "http://secrets.test/api"
157
+ }
158
+
159
+ // A sekreto Provider built in code.
160
+ class TestProvider(
161
+ private val onlookup: (String) -> String?,
162
+ private val label: String = "custom:test",
163
+ ) : Provider {
164
+ override fun lookup(name: String): String? = onlookup(name)
165
+ override fun describe(): String = label
166
+ }
167
+
168
+ // The Authorization header carries the SPEC's credential prefix, which a
169
+ // TEMPLATE cannot know: an OpenAPI `http`/`bearer` scheme gives
170
+ // `Bearer <token>`, an apiKey scheme the raw token. So assert on the
171
+ // CREDENTIAL and let the prefix be whatever this SDK's API declares.
172
+ private fun credentialIs(header: String?, token: String) {
173
+ val got = header ?: ""
174
+ assertTrue(got == token || got.endsWith(" $token"),
175
+ "expected the authorization header to carry $token, got: \"$got\"")
176
+ }
177
+
178
+ private fun map(vararg pairs: Pair<String, Any?>): MutableMap<String, Any?> =
179
+ linkedMapOf(*pairs)
180
+
181
+ private fun secretsFeatureOf(client: ProjectNameSDK): SecretsFeature? =
182
+ client.features.firstOrNull { it is SecretsFeature } as? SecretsFeature
183
+
184
+ // Build the client, and ADOPT the feature via `extend` ONLY when the
185
+ // generated Config did not already install it: when this SDK was generated
186
+ // with `secrets` model-active, the ordinary factory path builds the
187
+ // instance, and adding a second via extend would DOUBLE the feature - two
188
+ // transport wraps, two resolutions, and a token purchase the assertions
189
+ // cannot account for.
190
+ private fun withSecrets(build: (Boolean) -> ProjectNameSDK): ProjectNameSDK {
191
+ val client = build(false)
192
+ if (null != secretsFeatureOf(client)) {
193
+ return client
194
+ }
195
+ return build(true)
196
+ }
197
+
198
+ // A LIVE client carrying the secrets feature, wired to the recorder.
199
+ private fun secretsClient(w: Wire, sdkopts: MutableMap<String, Any?>): ProjectNameSDK {
200
+ val opts = map(
201
+ "base" to BASE,
202
+ "system" to map("fetch" to w.fetch),
203
+ )
204
+ opts.putAll(sdkopts)
205
+
206
+ return withSecrets { extend ->
207
+ val use = LinkedHashMap(opts)
208
+ if (extend) {
209
+ use["extend"] = mutableListOf<Any?>(SecretsFeature())
210
+ }
211
+ ProjectNameSDK(use)
212
+ }
213
+ }
214
+
215
+ // The feature options block: one provider (a live Provider object, or a
216
+ // declarative spec / plain map), plus any extra feature options.
217
+ private fun chainOpts(
218
+ provider: Any?,
219
+ extra: MutableMap<String, Any?>? = null,
220
+ ): MutableMap<String, Any?> {
221
+ val fopts = map(
222
+ "active" to true,
223
+ "providers" to mutableListOf<Any?>(provider),
224
+ )
225
+ if (extra != null) {
226
+ fopts.putAll(extra)
227
+ }
228
+ return map("secrets" to fopts)
229
+ }
230
+
231
+ private val BROKEN = TestProvider(
232
+ { throw RuntimeException("vault unreachable") }, "broken:test")
233
+
234
+ private fun working(value: String) =
235
+ TestProvider({ name -> if ("apikey" == name) value else null }, "working:test")
236
+
237
+ // -------------------------------------------------------------------
238
+ // Driving real entity operations - which is what runs the whole pipeline
239
+ // and reaches the transport. Entity accessors are discovered by SHAPE (one
240
+ // Map argument, an SdkEntity return) rather than by name, because this
241
+ // file is a TEMPLATE and no project's entity names are known here. An op
242
+ // the API does not define fails BEFORE the transport, which is why several
243
+ // may need driving.
244
+
245
+ private fun accessors(client: ProjectNameSDK): List<Method> =
246
+ client.javaClass.methods
247
+ .filter {
248
+ 1 == it.parameterCount &&
249
+ SdkEntity::class.java.isAssignableFrom(it.returnType) &&
250
+ java.util.Map::class.java.isAssignableFrom(it.parameterTypes[0])
251
+ }
252
+ .sortedBy { it.name }
253
+
254
+ // Drives ops until `stop` reports the observable state a test waits for,
255
+ // and returns the last error an op raised (the operation's own outcome is
256
+ // otherwise irrelevant: no seeded data, a scripted response). `stop` is
257
+ // handed that last error too, so a fail-closed case can stop on EITHER
258
+ // outcome - the refusal it wants, or a request going out, which is the
259
+ // failure it exists to catch; stopping only on the refusal would report
260
+ // "nothing to assert on" for the leak.
261
+ private fun driveEntityOpUntil(
262
+ client: ProjectNameSDK,
263
+ what: String,
264
+ stop: (Throwable?) -> Boolean,
265
+ ): Throwable? {
266
+ var last: Throwable? = null
267
+
268
+ for (m in accessors(client)) {
269
+ val ent = m.invoke(client, null) as? SdkEntity ?: continue
270
+
271
+ for (op in listOf<(SdkEntity) -> Any?>(
272
+ { it.list(null, null) },
273
+ { it.load(null, null) },
274
+ )) {
275
+ try {
276
+ op(ent)
277
+ } catch (err: Throwable) {
278
+ last = err
279
+ }
280
+ if (stop(last)) {
281
+ return last
282
+ }
283
+ }
284
+ }
285
+
286
+ fail<Unit>("no entity operation $what - nothing to assert on")
287
+ return last
288
+ }
289
+
290
+ private fun driveEntityOp(client: ProjectNameSDK, w: Wire): Throwable? {
291
+ val before = w.api().size
292
+ return driveEntityOpUntil(client, "reached the transport") { before < w.api().size }
293
+ }
294
+
295
+ private fun messageOf(err: Throwable?): String {
296
+ var e = err
297
+ val parts = mutableListOf<String>()
298
+ while (null != e) {
299
+ parts.add(e.message ?: e.toString())
300
+ e = e.cause
301
+ }
302
+ return parts.joinToString(" <- ")
303
+ }
304
+
305
+ // ===================================================================
306
+ // The feature-inactive baseline: bit-identical behaviour.
307
+
308
+ @Test
309
+ fun inactiveApikeyOptionBehavesExactlyAsBefore() {
310
+ val client = ProjectNameSDK.testSDK(null, map("apikey" to "OPTKEY01"))
311
+ val fetchdef = client.prepare(map("path" to "/"))
312
+ val headers = fetchdef["headers"] as MutableMap<String, Any?>
313
+ credentialIs(headers["authorization"] as? String, "OPTKEY01")
314
+
315
+ // No runtime activation, no extend: the feature must not be installed,
316
+ // whatever this project's model says.
317
+ assertNull(secretsFeatureOf(client),
318
+ "the feature must not install itself without feature.secrets.active")
319
+ }
320
+
321
+ @Test
322
+ fun inactiveNoApikeyMeansNoAuthorizationHeader() {
323
+ val client = ProjectNameSDK.testSDK(null, null)
324
+ val fetchdef = client.prepare(map("path" to "/"))
325
+ val headers = fetchdef["headers"] as MutableMap<String, Any?>
326
+ assertFalse(headers.containsKey("authorization"),
327
+ "unexpected authorization header: " + headers["authorization"])
328
+ }
329
+
330
+ // ===================================================================
331
+ // Active: the provider chain, driven through real entity operations.
332
+
333
+ @Test
334
+ fun apikeyOptionStillWinsOverTheChain() {
335
+ val w = Wire()
336
+ val client = secretsClient(w, map(
337
+ "apikey" to "OPTKEY01",
338
+ "feature" to chainOpts(working("CHAINKEY01")),
339
+ ))
340
+
341
+ driveEntityOp(client, w)
342
+ credentialIs(w.api()[0].auth, "OPTKEY01")
343
+
344
+ // The explicit option is a real store, not a special case: a directed
345
+ // read names it like any other.
346
+ val sf = secretsFeatureOf(client)
347
+ assertNotNull(sf, "the extend seam did not install the feature")
348
+ assertEquals("OPTKEY01", sf!!.sekreto()!!.getfrom("options", "apikey"))
349
+ }
350
+
351
+ @Test
352
+ fun anOmittedApikeyDefersToTheChainAtTheTransportSeam() {
353
+ val w = Wire()
354
+ val client = secretsClient(w, map(
355
+ "feature" to chainOpts(working("CHAINKEY02")),
356
+ ))
357
+
358
+ // Before any op, nothing has been resolved.
359
+ assertEquals("", secretsFeatureOf(client)!!.credential(),
360
+ "the chain was consulted before any operation")
361
+
362
+ driveEntityOp(client, w)
363
+
364
+ // Resolution happens AT THE TRANSPORT - the one seam every wire path
365
+ // crosses - so the credential is ON THE WIRE, not merely resolved.
366
+ credentialIs(w.api()[0].auth, "CHAINKEY02")
367
+ assertEquals("CHAINKEY02", secretsFeatureOf(client)!!.credential())
368
+
369
+ // And the shared options map stays FROZEN: prepareAuth clones it on
370
+ // every request, so a feature writing to it would race every concurrent
371
+ // operation.
372
+ assertEquals("", client.optionsMap()["apikey"],
373
+ "the options map must stay unwritten after construction")
374
+ }
375
+
376
+ @Test
377
+ fun anExplicitlyEmptyApikeyAlsoDefersToTheChain() {
378
+ val w = Wire()
379
+ val client = secretsClient(w, map(
380
+ "apikey" to "",
381
+ "feature" to chainOpts(working("CHAINKEY03")),
382
+ ))
383
+
384
+ driveEntityOp(client, w)
385
+ credentialIs(w.api()[0].auth, "CHAINKEY03")
386
+ }
387
+
388
+ @Test
389
+ fun customProviderObjectsAreAcceptedVerbatim() {
390
+ val asked = mutableListOf<String>()
391
+ val w = Wire()
392
+ val client = secretsClient(w, map(
393
+ "feature" to chainOpts(TestProvider({ name ->
394
+ synchronized(asked) { asked.add(name) }
395
+ "CUSTOM01"
396
+ })),
397
+ ))
398
+
399
+ driveEntityOp(client, w)
400
+ credentialIs(w.api()[0].auth, "CUSTOM01")
401
+ assertTrue(asked.contains("apikey"),
402
+ "the custom provider was asked $asked, want it to include apikey")
403
+ }
404
+
405
+ @Test
406
+ fun typedProviderSpecsAreAcceptedVerbatim() {
407
+ // The typed arm of the providers list: a ProviderSpec built in code
408
+ // joins the chain without going through `specof`.
409
+ val w = Wire()
410
+ val client = secretsClient(w, map(
411
+ "feature" to chainOpts(ProviderSpec(
412
+ kind = "memory",
413
+ values = mapOf("APIKEY" to "SPECKEY01"),
414
+ )),
415
+ ))
416
+
417
+ driveEntityOp(client, w)
418
+ credentialIs(w.api()[0].auth, "SPECKEY01")
419
+ }
420
+
421
+ @Test
422
+ fun declarativeMemorySpecsAreAcceptedAsMaps() {
423
+ // A chain given as plain maps (the shape a config file produces) is
424
+ // turned into ProviderSpecs by sekreto's own `specof`.
425
+ val w = Wire()
426
+ val client = secretsClient(w, map(
427
+ "feature" to chainOpts(map(
428
+ "kind" to "memory",
429
+ "values" to map("APIKEY" to "MAPKEY01"),
430
+ )),
431
+ ))
432
+
433
+ driveEntityOp(client, w)
434
+ credentialIs(w.api()[0].auth, "MAPKEY01")
435
+ }
436
+
437
+ @Test
438
+ fun aMissEverywhereLeavesTheHeaderOff() {
439
+ val w = Wire()
440
+ val client = secretsClient(w, map(
441
+ "feature" to chainOpts(TestProvider({ null }, "empty:test")),
442
+ ))
443
+
444
+ driveEntityOp(client, w)
445
+
446
+ // A MISS falls through to an unauthenticated request - and leaves the
447
+ // header ABSENT rather than empty, which is what prepareAuth does.
448
+ assertFalse(w.api()[0].hasAuth,
449
+ "a chain MISS must leave the header off, got \"" + w.api()[0].auth + "\"")
450
+ }
451
+
452
+ @Test
453
+ fun authNullSuppressesTheCredentialChainOrNoChain() {
454
+ val w = Wire()
455
+ val client = secretsClient(w, map(
456
+ "auth" to null,
457
+ "apikey" to "OPTKEY01",
458
+ "feature" to chainOpts(working("CHAINKEY04")),
459
+ ))
460
+
461
+ driveEntityOp(client, w)
462
+
463
+ // Nothing on the wire, even though the chain would have resolved AND an
464
+ // explicit apikey was given.
465
+ assertFalse(w.api()[0].hasAuth,
466
+ "auth null must suppress the credential, got \"" + w.api()[0].auth + "\"")
467
+
468
+ // The suppression survives option validation rather than being replaced
469
+ // by the optspec's default auth map.
470
+ val opts = client.optionsMap()
471
+ assertTrue(opts.containsKey("auth"), "options.auth must stay present")
472
+ assertNull(opts["auth"], "options.auth must stay a null")
473
+ }
474
+
475
+ @Test
476
+ fun secretNameIsConfigurable() {
477
+ val w = Wire()
478
+ val client = secretsClient(w, map(
479
+ "feature" to chainOpts(
480
+ map("kind" to "memory", "values" to map("API_TOKEN" to "TOKKEY01")),
481
+ map("name" to "api.token")),
482
+ ))
483
+
484
+ driveEntityOp(client, w)
485
+ credentialIs(w.api()[0].auth, "TOKKEY01")
486
+ }
487
+
488
+ @Test
489
+ fun sekretoIsLiveForArbitrarySecretsAndRedaction() {
490
+ val w = Wire()
491
+ val client = secretsClient(w, map(
492
+ "feature" to chainOpts(map(
493
+ "kind" to "memory",
494
+ "values" to map("DB_PASSWORD" to "dbpass01"),
495
+ )),
496
+ ))
497
+
498
+ val secrets = secretsFeatureOf(client)!!.sekreto()!!
499
+ assertEquals("dbpass01", secrets.get("db.password"))
500
+ assertEquals("the password is [redacted], keep it safe",
501
+ secrets.redact("the password is dbpass01, keep it safe"))
502
+ }
503
+
504
+ // THE PROVIDER VOCABULARY IS NON-EMPTY.
505
+ //
506
+ // The model's choice of plugin groups IS the SDK's provider vocabulary:
507
+ // Config emits the selected definitions and the feature hands them to
508
+ // Sekreto, which refuses at CONSTRUCTION any kind it was not given. A
509
+ // feature that dropped them on the floor would carry every selected plugin
510
+ // FILE and refuse every one of their kinds at runtime, while every test
511
+ // using only built-in kinds stayed green.
512
+ //
513
+ // Conditional on this project selecting a group at all.
514
+ @Test
515
+ fun aSelectedPluginKindIsInTheSdkVocabulary() {
516
+ val plugins = Config.featurePlugins("secrets")
517
+ if (plugins.isEmpty()) {
518
+ return
519
+ }
520
+
521
+ val w = Wire()
522
+ val client = secretsClient(w, map(
523
+ "feature" to chainOpts(map(
524
+ "kind" to "memory", "values" to map("APIKEY" to "VOCAB01"))),
525
+ ))
526
+
527
+ val catalog = secretsFeatureOf(client)!!.sekreto()!!.catalog
528
+ for (d in plugins) {
529
+ val kind = (d as? Map<String, Any?>)?.get("name") as? String
530
+ assertNotNull(kind, "a selected plugin definition has no kind: $d")
531
+ assertTrue(catalog.has(kind!!),
532
+ "the model selected plugin kind '$kind' but the feature's Sekreto " +
533
+ "does not know it - the definitions never reached the chain")
534
+ }
535
+
536
+ driveEntityOp(client, w)
537
+ credentialIs(w.api()[0].auth, "VOCAB01")
538
+ }
539
+
540
+ // ===================================================================
541
+ // FAIL CLOSED. sekreto's miss-vs-error invariant: a MISS falls through, an
542
+ // ERROR does not. A broken vault must never degrade into an
543
+ // unauthenticated request.
544
+
545
+ @Test
546
+ fun aProviderErrorFailsTheEntityOpAndNothingReachesTheWire() {
547
+ // THE RULE, asserted first so a regression reports the leak itself.
548
+ val w = Wire()
549
+ val client = secretsClient(w, map("feature" to chainOpts(BROKEN)))
550
+
551
+ // Stop on EITHER outcome - the refusal, or a request going out. Stopping
552
+ // on the first op driven would report an op the API does not define
553
+ // (which fails BEFORE the transport) as the provider's refusal.
554
+ val err = driveEntityOpUntil(client, "refused the operation or sent one") {
555
+ last -> 0 < w.api().size || messageOf(last).contains("vault unreachable")
556
+ }
557
+
558
+ assertEquals(0, w.api().size,
559
+ "a request must not go out unauthenticated because a provider broke," +
560
+ " but one reached the transport: " + w.wire())
561
+ assertNotNull(err, "the operation must fail rather than proceed")
562
+ assertTrue(messageOf(err).contains("vault unreachable"),
563
+ "the failure must carry the PROVIDER'S own message, got: " + messageOf(err))
564
+
565
+ // CONTROL, which makes that zero mean REFUSED rather than UNWIRED: the
566
+ // same construction with a WORKING provider must reach the same
567
+ // transport, once, carrying the credential.
568
+ val control = Wire()
569
+ val ok = secretsClient(control, map("feature" to chainOpts(working("RAWKEY01"))))
570
+ driveEntityOp(ok, control)
571
+
572
+ assertEquals(1, control.api().size,
573
+ "the control operation did not reach system.fetch exactly once, so " +
574
+ "this test cannot observe a request going out at all: " + control.wire())
575
+ credentialIs(control.api()[0].auth, "RAWKEY01")
576
+ }
577
+
578
+ // THE RAW PATHS, which run NO feature hooks at all. If resolution lived in
579
+ // the PreSpec hook these would send an unauthenticated request and never
580
+ // notice; they are covered because the TRANSPORT is where resolution
581
+ // happens.
582
+ //
583
+ // `allow.op` is named explicitly: a project that narrows the default set
584
+ // would otherwise turn these into a false RED (the control leg refused
585
+ // before it reached the transport).
586
+
587
+ @Test
588
+ fun directCarriesTheChainCredentialAndFailsClosed() {
589
+ val w = Wire()
590
+ val client = secretsClient(w, map(
591
+ "allow" to map("op" to "direct,graphql"),
592
+ "feature" to chainOpts(working("DIRECTKEY01")),
593
+ ))
594
+
595
+ val res = client.direct(map("path" to "/direct-probe"))
596
+ assertEquals(true, res["ok"], "direct refused: " + res["err"])
597
+ assertEquals(1, w.api().size, "expected one direct call on the wire: " + w.wire())
598
+ credentialIs(w.api()[0].auth, "DIRECTKEY01")
599
+
600
+ // And fail-closed holds for raw access too: a broken chain refuses the
601
+ // direct call before anything reaches the wire, IN BAND.
602
+ val broken = Wire()
603
+ val bclient = secretsClient(broken, map(
604
+ "allow" to map("op" to "direct,graphql"),
605
+ "feature" to chainOpts(BROKEN),
606
+ ))
607
+
608
+ val bres = bclient.direct(map("path" to "/direct-probe"))
609
+ assertEquals(0, broken.api().size,
610
+ "a broken chain must not yield a raw request: " + broken.wire())
611
+ assertEquals(false, bres["ok"], "a broken chain must refuse the raw path")
612
+ assertTrue(messageOf(bres["err"] as? Throwable).contains("vault unreachable"),
613
+ "direct must report the PROVIDER'S own refusal, got: " +
614
+ messageOf(bres["err"] as? Throwable))
615
+ }
616
+
617
+ @Test
618
+ fun graphqlCarriesTheChainCredentialAndFailsClosed() {
619
+ val w = Wire()
620
+ val client = secretsClient(w, map(
621
+ "allow" to map("op" to "direct,graphql"),
622
+ "feature" to chainOpts(working("GQLKEY01")),
623
+ ))
624
+
625
+ val res = client.graphql("{ thing }", null, null)
626
+ assertEquals(true, res["ok"], "graphql refused: " + res["err"])
627
+ assertEquals(1, w.api().size, "expected one graphql call on the wire: " + w.wire())
628
+ credentialIs(w.api()[0].auth, "GQLKEY01")
629
+
630
+ val broken = Wire()
631
+ val bclient = secretsClient(broken, map(
632
+ "allow" to map("op" to "direct,graphql"),
633
+ "feature" to chainOpts(BROKEN),
634
+ ))
635
+
636
+ val bres = bclient.graphql("{ thing }", null, null)
637
+ assertEquals(0, broken.api().size,
638
+ "a broken chain must not yield a graphql request: " + broken.wire())
639
+ assertEquals(false, bres["ok"], "a broken chain must refuse graphql")
640
+ assertTrue(messageOf(bres["err"] as? Throwable).contains("vault unreachable"),
641
+ "graphql must report the PROVIDER'S own refusal, got: " +
642
+ messageOf(bres["err"] as? Throwable))
643
+ }
644
+
645
+ // ===================================================================
646
+ // FAIL CLOSED ON A CONSTRUCTION FAILURE. The chain a project configures
647
+ // can be wrong before a single lookup happens, and init() cannot fail the
648
+ // client construction the way ts's throwing init does - so it HOLDS the
649
+ // error (`initerr`) and the transport gate refuses to send.
650
+ //
651
+ // The entry pinned here is one the constructor refuses but init used to
652
+ // never SHOW it: a bare kind name where a spec belongs. init's `when`
653
+ // over the providers list had arms for a Provider, a ProviderSpec and a
654
+ // Map, and no `else` - so the entry was silently DROPPED, the chain got
655
+ // SHORTER rather than broken, and every request went out unauthenticated
656
+ // while the gate had nothing to refuse. That is fail-open by omission,
657
+ // and it survived every other case in this file because each of them
658
+ // configures the chain correctly.
659
+ //
660
+ // Three cases for the three wire paths - the entity pipeline, direct()
661
+ // and graphql() - each with its own CONTROL leg through the SAME live
662
+ // transport, so a zero means REFUSED and not UNWIRED. The refusal is
663
+ // matched on sekreto's OWN message, so an unrelated failure cannot
664
+ // stand in for it.
665
+
666
+ // A kind NAME where a provider or spec belongs - the natural slip for a
667
+ // reader of the ts docs. sekreto's constructor refuses exactly this.
668
+ private val MALFORMED: Any? = "hashicorp"
669
+ private val NOTAPROVIDER = "not a provider or a provider spec"
670
+
671
+ private fun saysNotAProvider(err: Any?): Boolean =
672
+ (if (err is Throwable) messageOf(err) else err?.toString() ?: "")
673
+ .contains(NOTAPROVIDER)
674
+
675
+ @Test
676
+ fun aMalformedProviderEntryFailsTheEntityOpAndNothingReachesTheWire() {
677
+ // CONTROL FIRST, so the zero below is known to be observable at all.
678
+ val control = Wire()
679
+ val ok = secretsClient(control, map("feature" to chainOpts(working("INITKEY01"))))
680
+ driveEntityOp(ok, control)
681
+ assertEquals(1, control.api().size,
682
+ "the control operation did not reach system.fetch exactly once, so " +
683
+ "this test cannot observe a request going out at all: " + control.wire())
684
+ credentialIs(control.api()[0].auth, "INITKEY01")
685
+
686
+ // THE RULE.
687
+ val w = Wire()
688
+ val client = secretsClient(w, map("feature" to chainOpts(MALFORMED)))
689
+
690
+ // The feature must still be INSTALLED: a construction failure that
691
+ // silently uninstalled it would be the same fail-open by another route,
692
+ // with nothing downstream gating anything.
693
+ assertNotNull(secretsFeatureOf(client),
694
+ "the secrets feature must stay installed on a construction failure")
695
+
696
+ val err = driveEntityOpUntil(client, "refused the operation or sent one") {
697
+ last -> 0 < w.api().size || saysNotAProvider(last)
698
+ }
699
+
700
+ assertEquals(0, w.api().size,
701
+ "a malformed providers entry was DROPPED and the shortened chain sent " +
702
+ "an UNAUTHENTICATED request: " + w.wire())
703
+ assertNotNull(err, "the entity op must fail when the chain cannot be built")
704
+ assertTrue(saysNotAProvider(err),
705
+ "the refusal must carry sekreto's own message ($NOTAPROVIDER), got: " +
706
+ messageOf(err))
707
+ }
708
+
709
+ @Test
710
+ fun aMalformedProviderEntryFailsDirectRatherThanSending() {
711
+ // CONTROL FIRST.
712
+ val control = Wire()
713
+ val res = secretsClient(control, map(
714
+ "allow" to map("op" to "direct,graphql"),
715
+ "feature" to chainOpts(working("INITKEY01")),
716
+ )).direct(map("path" to "/thing"))
717
+ assertEquals(true, res["ok"], "the control request failed: " + res["err"])
718
+ assertEquals(1, control.api().size,
719
+ "the control request did not reach system.fetch exactly once, so " +
720
+ "this test cannot observe a request going out at all: " + control.wire())
721
+ credentialIs(control.api()[0].auth, "INITKEY01")
722
+
723
+ // THE RULE. direct() runs no feature hook at all, so the ONLY thing
724
+ // that can refuse it is the transport gate.
725
+ val w = Wire()
726
+ val out = secretsClient(w, map(
727
+ "allow" to map("op" to "direct,graphql"),
728
+ "feature" to chainOpts(MALFORMED),
729
+ )).direct(map("path" to "/thing"))
730
+
731
+ assertEquals(0, w.api().size,
732
+ "a malformed providers entry was DROPPED and the shortened chain sent " +
733
+ "an UNAUTHENTICATED direct request: " + w.wire())
734
+ assertEquals(false, out["ok"],
735
+ "a chain that could not be built must refuse the raw path fail-closed")
736
+ assertTrue(saysNotAProvider(out["err"]),
737
+ "the refusal must carry sekreto's own message ($NOTAPROVIDER), got: " +
738
+ messageOf(out["err"] as? Throwable))
739
+ }
740
+
741
+ @Test
742
+ fun aMalformedProviderEntryFailsGraphqlRatherThanSending() {
743
+ // CONTROL FIRST.
744
+ val control = Wire()
745
+ val res = secretsClient(control, map(
746
+ "allow" to map("op" to "direct,graphql"),
747
+ "feature" to chainOpts(working("INITKEY01")),
748
+ )).graphql("{ thing }", null, null)
749
+ assertEquals(true, res["ok"], "the control request failed: " + res["err"])
750
+ assertEquals(1, control.api().size,
751
+ "the control request did not reach system.fetch exactly once, so " +
752
+ "this test cannot observe a request going out at all: " + control.wire())
753
+ credentialIs(control.api()[0].auth, "INITKEY01")
754
+
755
+ // THE RULE.
756
+ val w = Wire()
757
+ val out = secretsClient(w, map(
758
+ "allow" to map("op" to "direct,graphql"),
759
+ "feature" to chainOpts(MALFORMED),
760
+ )).graphql("{ thing }", null, null)
761
+
762
+ assertEquals(0, w.api().size,
763
+ "a malformed providers entry was DROPPED and the shortened chain sent " +
764
+ "an UNAUTHENTICATED graphql request: " + w.wire())
765
+ assertEquals(false, out["ok"],
766
+ "a chain that could not be built must refuse graphql fail-closed")
767
+ assertTrue(saysNotAProvider(out["err"]),
768
+ "the refusal must carry sekreto's own message ($NOTAPROVIDER), got: " +
769
+ messageOf(out["err"] as? Throwable))
770
+ }
771
+
772
+ @Test
773
+ fun aProviderRecoversAfterATransientFailure() {
774
+ var calls = 0
775
+ val w = Wire()
776
+ val client = secretsClient(w, map(
777
+ "feature" to chainOpts(TestProvider({ _ ->
778
+ val n = synchronized(this) { ++calls }
779
+ if (1 == n) {
780
+ throw RuntimeException("vault unreachable")
781
+ }
782
+ "RECOVERED01"
783
+ }, "flaky:test")),
784
+ ))
785
+
786
+ // A failed resolution is never cached, so the second op asks the chain
787
+ // again and succeeds. Holding the failure would mean a transient vault
788
+ // outage poisoned the client permanently.
789
+ driveEntityOpUntil(client, "consulted the chain") { 0 < calls }
790
+ assertEquals(0, w.api().size, "the first op must not reach the wire")
791
+
792
+ driveEntityOp(client, w)
793
+ credentialIs(w.api()[0].auth, "RECOVERED01")
794
+ }
795
+
796
+ @Test
797
+ fun uncachedMissRetractsTheCredential() {
798
+ var have = true
799
+ val w = Wire()
800
+ val client = secretsClient(w, map(
801
+ "feature" to chainOpts(
802
+ TestProvider({ _ -> if (synchronized(this) { have }) "REVOCABLE01" else null },
803
+ "revocable:test"),
804
+ map("cache" to false)),
805
+ ))
806
+
807
+ driveEntityOp(client, w)
808
+ credentialIs(w.api()[0].auth, "REVOCABLE01")
809
+
810
+ synchronized(this) { have = false }
811
+
812
+ driveEntityOp(client, w)
813
+ val last = w.api().last()
814
+ assertFalse(last.hasAuth && "" != last.auth,
815
+ "after the chain reports a miss the retracted credential must not go " +
816
+ "out; the wire saw \"" + last.auth + "\"")
817
+ }
818
+
819
+ // A provider failure closes the transport gate; a later retry that
820
+ // SUCCEEDS reopens it and every waiting operation goes out with the FRESH
821
+ // credential - never the stale pre-failure header, and never nothing.
822
+ @Test
823
+ fun gateRecoveryLetsWaitingOperationsOutWithTheFreshCredential() {
824
+ var mode = "fail"
825
+ val release = CountDownLatch(1)
826
+ val w = Wire()
827
+
828
+ val client = secretsClient(w, map(
829
+ "feature" to chainOpts(
830
+ TestProvider({ _ ->
831
+ val m = synchronized(this) { mode }
832
+ if ("fail" == m) {
833
+ throw RuntimeException("vault unreachable")
834
+ }
835
+ if ("slow" == m) {
836
+ release.await(5, TimeUnit.SECONDS)
837
+ }
838
+ "FRESH01"
839
+ }, "gate:test"),
840
+ map("cache" to false)),
841
+ ))
842
+
843
+ // 1. The failure closes the gate: nothing reaches the wire. Stop on
844
+ // EITHER outcome, so an op the API does not define (which fails before
845
+ // the transport) is not mistaken for the gate's refusal.
846
+ driveEntityOpUntil(client, "was refused by the gate or sent one") {
847
+ last -> 0 < w.api().size || messageOf(last).contains("vault unreachable")
848
+ }
849
+ assertEquals(0, w.api().size,
850
+ "a failed resolution must keep the wire silent, saw: " + w.wire())
851
+
852
+ // 2. Recovery under concurrency: two operations race the slow retry;
853
+ // both must come out carrying the fresh credential.
854
+ synchronized(this) { mode = "slow" }
855
+
856
+ // Each thread drives until SOMETHING reached the wire - its own op or
857
+ // the other thread's - which is the state the assertion reads.
858
+ val threads = (1..2).map {
859
+ Thread { driveEntityOpUntil(client, "recovered") { 0 < w.api().size } }
860
+ }
861
+ threads.forEach { it.start() }
862
+ Thread.sleep(50)
863
+ release.countDown()
864
+ threads.forEach { it.join(10000) }
865
+
866
+ assertTrue(0 < w.api().size, "recovery must let the operations out")
867
+ for (call in w.api()) {
868
+ credentialIs(call.auth, "FRESH01")
869
+ }
870
+ }
871
+
872
+ // ===================================================================
873
+ // ACCESS-TOKEN EXCHANGE.
874
+ //
875
+ // What the chain resolves is a REFRESH token, which is POSTed to a token
876
+ // endpoint for a short-lived ACCESS token; the access token is what the
877
+ // Authorization header carries; and when the API answers 401 the client
878
+ // buys another and tries the same request again, once.
879
+
880
+ private fun exchangeClient(
881
+ w: Wire,
882
+ refresh: String,
883
+ exchange: MutableMap<String, Any?>?,
884
+ extra: MutableMap<String, Any?>?,
885
+ ): ProjectNameSDK {
886
+ val x = map("active" to true)
887
+ if (exchange != null) {
888
+ x.putAll(exchange)
889
+ }
890
+
891
+ val fopts = map(
892
+ "active" to true,
893
+ "name" to "refresh_token",
894
+ "providers" to mutableListOf<Any?>(
895
+ if ("" == refresh) TestProvider({ null }, "norefresh:test")
896
+ else TestProvider(
897
+ { name -> if ("refresh_token" == name) refresh else null }, "refresh:test")),
898
+ "exchange" to x,
899
+ )
900
+
901
+ val opts = map("allow" to map("op" to "direct,graphql"), "feature" to map("secrets" to fopts))
902
+ if (extra != null) {
903
+ opts.putAll(extra)
904
+ }
905
+ return secretsClient(w, opts)
906
+ }
907
+
908
+ private fun bodyField(body: String, field: String): String? {
909
+ val parsed = KOTLINPACKAGE.utility.Json.parse(body)
910
+ return (parsed as? Map<String, Any?>)?.get(field) as? String
911
+ }
912
+
913
+ @Test
914
+ fun theRefreshTokenBuysAnAccessTokenAndTheRequestCarriesIt() {
915
+ val w = Wire()
916
+ val client = exchangeClient(w, "REFRESH01", null, null)
917
+
918
+ client.direct(map("path" to "/thing"))
919
+
920
+ assertEquals(1, w.token().size, "expected exactly one token purchase")
921
+ assertEquals("REFRESH01", bodyField(w.token()[0].body, "refresh_token"),
922
+ "the refresh token is sent in the request field")
923
+ assertEquals(1, w.api().size)
924
+ credentialIs(w.api()[0].auth, "ACCESS01")
925
+ }
926
+
927
+ @Test
928
+ fun theRefreshTokenIsMarshalledNotConcatenated() {
929
+ // A refresh token carrying a quote, backslash or newline must arrive as
930
+ // that literal value, not as malformed JSON.
931
+ val tricky = "re\"fresh\\to\nken"
932
+ val w = Wire()
933
+ val client = exchangeClient(w, "", map("refresh" to tricky), null)
934
+
935
+ client.direct(map("path" to "/thing"))
936
+
937
+ assertEquals(1, w.token().size)
938
+ assertEquals(tricky, bodyField(w.token()[0].body, "refresh_token"),
939
+ "the refresh token must arrive as its literal value: " + w.token()[0].body)
940
+ }
941
+
942
+ @Test
943
+ fun anExplicitExchangeRefreshWinsOverTheChain() {
944
+ val w = Wire()
945
+ val client = exchangeClient(w, "FROMCHAIN", map("refresh" to "EXPLICIT01"), null)
946
+
947
+ client.direct(map("path" to "/thing"))
948
+ assertEquals("EXPLICIT01", bodyField(w.token()[0].body, "refresh_token"))
949
+ }
950
+
951
+ @Test
952
+ fun onePurchaseServesManyRequests() {
953
+ val w = Wire()
954
+ val client = exchangeClient(w, "REFRESH01", null, null)
955
+
956
+ client.direct(map("path" to "/one"))
957
+ client.direct(map("path" to "/two"))
958
+ client.direct(map("path" to "/three"))
959
+
960
+ assertEquals(1, w.token().size, "a token still working must not be re-bought")
961
+ assertEquals(3, w.api().size)
962
+ }
963
+
964
+ @Test
965
+ fun concurrentFirstRequestsShareOnePurchase() {
966
+ val w = Wire()
967
+ val client = exchangeClient(w, "REFRESH01", null, null)
968
+
969
+ val threads = listOf("/a", "/b", "/c", "/d").map { p ->
970
+ Thread { client.direct(map("path" to p)) }
971
+ }
972
+ threads.forEach { it.start() }
973
+ threads.forEach { it.join(10000) }
974
+
975
+ assertEquals(1, w.token().size,
976
+ "four operations at once must not open four token requests")
977
+ assertEquals(4, w.api().size)
978
+ }
979
+
980
+ @Test
981
+ fun anExpiryBuysAnotherTokenAndRetriesTheSameRequest() {
982
+ val w = Wire()
983
+ w.apistatus = listOf(401, 200)
984
+ val client = exchangeClient(w, "REFRESH01", null, null)
985
+
986
+ val res = client.direct(map("path" to "/thing"))
987
+
988
+ assertEquals(2, w.token().size, "expected a second token purchase")
989
+ assertEquals(2, w.api().size, "expected the request to be retried")
990
+ credentialIs(w.api()[0].auth, "ACCESS01")
991
+ // The retry must carry the NEW token, not the spent one.
992
+ credentialIs(w.api()[1].auth, "ACCESS02")
993
+ assertEquals(true, res["ok"], "the caller sees the successful retry")
994
+ }
995
+
996
+ @Test
997
+ fun theRetryHappensOnceNotInALoop() {
998
+ val w = Wire()
999
+ w.apistatus = listOf(401)
1000
+ val client = exchangeClient(w, "REFRESH01", null, null)
1001
+
1002
+ client.direct(map("path" to "/thing"))
1003
+
1004
+ assertEquals(2, w.api().size, "exactly one retry")
1005
+ assertEquals(2, w.token().size)
1006
+ }
1007
+
1008
+ @Test
1009
+ fun aStatusOutsideExchangeStatusesIsNotAnExpiry() {
1010
+ val w = Wire()
1011
+ w.apistatus = listOf(403)
1012
+ val client = exchangeClient(w, "REFRESH01", null, null)
1013
+
1014
+ client.direct(map("path" to "/thing"))
1015
+
1016
+ assertEquals(1, w.api().size, "403 is not in the default statuses")
1017
+ assertEquals(1, w.token().size)
1018
+ }
1019
+
1020
+ @Test
1021
+ fun exchangeStatusesIsConfigurable() {
1022
+ val w = Wire()
1023
+ w.apistatus = listOf(403, 200)
1024
+ val client = exchangeClient(w, "REFRESH01",
1025
+ map("statuses" to mutableListOf<Any?>(403)), null)
1026
+
1027
+ client.direct(map("path" to "/thing"))
1028
+ assertEquals(2, w.api().size, "403 was declared an expiry")
1029
+ }
1030
+
1031
+ @Test
1032
+ fun theRequestAndResponseFieldNamesAndPathAreConfigurable() {
1033
+ val w = Wire()
1034
+ w.tokenpath = "oauth/grant"
1035
+ w.respfield = "token"
1036
+ val client = exchangeClient(w, "REFRESH01", map(
1037
+ "path" to "oauth/grant",
1038
+ "request" to "grant",
1039
+ "response" to "token",
1040
+ ), null)
1041
+
1042
+ client.direct(map("path" to "/thing"))
1043
+
1044
+ assertEquals(1, w.token().size)
1045
+ assertTrue(w.token()[0].url.endsWith("/oauth/grant"),
1046
+ "the token endpoint is relative to base: " + w.token()[0].url)
1047
+ assertEquals("REFRESH01", bodyField(w.token()[0].body, "grant"))
1048
+ credentialIs(w.api()[0].auth, "ACCESS01")
1049
+ }
1050
+
1051
+ @Test
1052
+ fun anExplicitApikeyIsSpentBeforeAnythingIsBought() {
1053
+ val w = Wire()
1054
+ val client = exchangeClient(w, "REFRESH01", null, map("apikey" to "HELDTOKEN01"))
1055
+
1056
+ client.direct(map("path" to "/thing"))
1057
+
1058
+ assertEquals(0, w.token().size, "nothing needed buying")
1059
+ credentialIs(w.api()[0].auth, "HELDTOKEN01")
1060
+ }
1061
+
1062
+ @Test
1063
+ fun aHeldApikeyThatHasExpiredFallsThroughToTheExchange() {
1064
+ val w = Wire()
1065
+ w.apistatus = listOf(401, 200)
1066
+ val client = exchangeClient(w, "REFRESH01", null, map("apikey" to "STALETOKEN01"))
1067
+
1068
+ client.direct(map("path" to "/thing"))
1069
+
1070
+ credentialIs(w.api()[0].auth, "STALETOKEN01")
1071
+ credentialIs(w.api()[1].auth, "ACCESS01")
1072
+ }
1073
+
1074
+ @Test
1075
+ fun noRefreshTokenAnywhereIsAnErrorNotAnUnauthenticatedCall() {
1076
+ val w = Wire()
1077
+ val client = exchangeClient(w, "", null, null)
1078
+
1079
+ val res = client.direct(map("path" to "/thing"))
1080
+
1081
+ assertEquals(false, res["ok"], "expected a failure, got: $res")
1082
+ assertEquals(0, w.api().size,
1083
+ "a request must not go out unauthenticated because the chain was " +
1084
+ "empty: " + w.wire())
1085
+ assertTrue(messageOf(res["err"] as? Throwable).contains("no refresh token"),
1086
+ "expected the no-refresh-token refusal, got: " +
1087
+ messageOf(res["err"] as? Throwable))
1088
+ }
1089
+
1090
+ @Test
1091
+ fun aFailingTokenEndpointSurfacesTheApiRefusalNotASpin() {
1092
+ val w = Wire()
1093
+ w.apistatus = listOf(401)
1094
+ // The first purchase succeeds; the second (after the 401) does not.
1095
+ w.tokenok = 1
1096
+ val client = exchangeClient(w, "REFRESH01", null, null)
1097
+
1098
+ val res = client.direct(map("path" to "/thing"))
1099
+
1100
+ assertNotNull(res, "the caller got an answer rather than a hang")
1101
+ assertEquals(1, w.api().size, "no retry after a failed purchase")
1102
+ assertEquals(false, res["ok"], "the API's own 401 is what the caller sees")
1103
+ }
1104
+
1105
+ @Test
1106
+ fun authNullSuppressesTheCredentialRefusalOrNot() {
1107
+ val w = Wire()
1108
+ w.apistatus = listOf(401)
1109
+ val client = exchangeClient(w, "REFRESH01", null, map("auth" to null))
1110
+
1111
+ client.direct(map("path" to "/thing"))
1112
+
1113
+ assertEquals(1, w.api().size, "a suppressed request must not be retried")
1114
+ assertFalse(w.api()[0].hasAuth,
1115
+ "no credential may be sent when auth is suppressed, got \"" +
1116
+ w.api()[0].auth + "\"")
1117
+ }
1118
+
1119
+ @Test
1120
+ fun testModeBuysNothingAndNeedsNoTokenEndpoint() {
1121
+ val w = Wire()
1122
+
1123
+ val client = withSecrets { extend ->
1124
+ val opts = map(
1125
+ "base" to BASE,
1126
+ "allow" to map("op" to "direct,graphql"),
1127
+ "system" to map("fetch" to w.fetch),
1128
+ "feature" to map("secrets" to map(
1129
+ "active" to true,
1130
+ "name" to "refresh_token",
1131
+ "providers" to mutableListOf<Any?>(TestProvider(
1132
+ { name -> if ("refresh_token" == name) "REFRESH01" else null })),
1133
+ "exchange" to map("active" to true),
1134
+ )),
1135
+ )
1136
+ if (extend) {
1137
+ opts["extend"] = mutableListOf<Any?>(SecretsFeature())
1138
+ }
1139
+ ProjectNameSDK.testSDK(null, opts)
1140
+ }
1141
+
1142
+ client.direct(map("path" to "/thing"))
1143
+
1144
+ assertEquals(0, w.calls().size, "test mode must not do IO: " + w.wire())
1145
+ // A deterministic placeholder, so offline suites need no configuration.
1146
+ assertEquals("test-access_token", secretsFeatureOf(client)!!.credential())
1147
+ }
1148
+ }