@voxgig/sdkgen 4.9.0 → 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 (887) hide show
  1. package/dist/helpers/manifest.d.ts +2 -1
  2. package/dist/helpers/manifest.js +75 -1
  3. package/dist/helpers/manifest.js.map +1 -1
  4. package/dist/helpers/modelNames.d.ts +7 -0
  5. package/dist/helpers/modelNames.js +232 -0
  6. package/dist/helpers/modelNames.js.map +1 -0
  7. package/dist/helpers/naming.d.ts +2 -1
  8. package/dist/helpers/naming.js +45 -1
  9. package/dist/helpers/naming.js.map +1 -1
  10. package/dist/sdkgen.d.ts +3 -2
  11. package/dist/sdkgen.js +12 -3
  12. package/dist/sdkgen.js.map +1 -1
  13. package/dist/testkit.d.ts +2 -0
  14. package/dist/testkit.js +80 -24
  15. package/dist/testkit.js.map +1 -1
  16. package/dist/tsconfig.tsbuildinfo +1 -1
  17. package/dist/utility.js +17 -7
  18. package/dist/utility.js.map +1 -1
  19. package/package.json +1 -1
  20. package/project/.sdk/model/feature/secrets.aon +671 -0
  21. package/project/.sdk/model/target/clojure.aon +10 -0
  22. package/project/.sdk/model/target/csharp.aon +5 -0
  23. package/project/.sdk/model/target/elixir.aon +6 -0
  24. package/project/.sdk/model/target/java.aon +5 -0
  25. package/project/.sdk/model/target/js.aon +5 -0
  26. package/project/.sdk/model/target/kotlin.aon +7 -0
  27. package/project/.sdk/model/target/perl.aon +5 -0
  28. package/project/.sdk/model/target/php.aon +5 -0
  29. package/project/.sdk/model/target/rb.aon +5 -0
  30. package/project/.sdk/model/target/rust.aon +5 -0
  31. package/project/.sdk/model/target/scala.aon +38 -2
  32. package/project/.sdk/model/target/swift.aon +10 -0
  33. package/project/.sdk/src/cmp/clojure/Config_clojure.ts +51 -4
  34. package/project/.sdk/src/cmp/clojure/Main_clojure.ts +43 -1
  35. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +17 -1
  36. package/project/.sdk/src/cmp/clojure/featureextra_clojure.ts +130 -0
  37. package/project/.sdk/src/cmp/csharp/Config_csharp.ts +70 -0
  38. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +9 -1
  39. package/project/.sdk/src/cmp/csharp/Package_csharp.ts +25 -1
  40. package/project/.sdk/src/cmp/elixir/Config_elixir.ts +68 -2
  41. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +16 -0
  42. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +14 -1
  43. package/project/.sdk/src/cmp/java/Config_java.ts +84 -2
  44. package/project/.sdk/src/cmp/java/Main_java.ts +10 -1
  45. package/project/.sdk/src/cmp/js/Config_js.ts +75 -8
  46. package/project/.sdk/src/cmp/js/Main_js.ts +66 -2
  47. package/project/.sdk/src/cmp/js/fragment/Config.data.fragment.js +18 -1
  48. package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +18 -1
  49. package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +7 -0
  50. package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +63 -1
  51. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +32 -2
  52. package/project/.sdk/src/cmp/perl/Config_perl.ts +129 -3
  53. package/project/.sdk/src/cmp/perl/Main_perl.ts +41 -1
  54. package/project/.sdk/src/cmp/perl/Package_perl.ts +13 -1
  55. package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +1 -0
  56. package/project/.sdk/src/cmp/php/Config_php.ts +105 -1
  57. package/project/.sdk/src/cmp/php/Gitignore_php.ts +4 -2
  58. package/project/.sdk/src/cmp/php/Main_php.ts +16 -1
  59. package/project/.sdk/src/cmp/rb/Config_rb.ts +92 -2
  60. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +11 -1
  61. package/project/.sdk/src/cmp/rb/Main_rb.ts +7 -1
  62. package/project/.sdk/src/cmp/rust/Main_rust.ts +99 -1
  63. package/project/.sdk/src/cmp/rust/Package_rust.ts +72 -6
  64. package/project/.sdk/src/cmp/scala/Config_scala.ts +44 -0
  65. package/project/.sdk/src/cmp/scala/Main_scala.ts +68 -1
  66. package/project/.sdk/src/cmp/swift/Config_swift.ts +62 -1
  67. package/project/.sdk/src/cmp/swift/Main_swift.ts +35 -1
  68. package/project/.sdk/src/cmp/swift/Package_swift.ts +81 -11
  69. package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +58 -44
  70. package/project/.sdk/src/cmp/swift/utility_swift.ts +22 -0
  71. package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
  72. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
  73. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
  74. package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
  75. package/project/.sdk/tm/clojure/Makefile +3 -0
  76. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +503 -0
  77. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +84 -0
  78. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +44 -0
  79. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +240 -0
  80. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +199 -0
  81. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +111 -0
  82. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +46 -0
  83. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +122 -0
  84. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +1018 -0
  85. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +106 -0
  86. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +157 -0
  87. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +77 -0
  88. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +92 -0
  89. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +46 -0
  90. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +177 -0
  91. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +90 -0
  92. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +40 -0
  93. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +111 -0
  94. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +297 -0
  95. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +192 -0
  96. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +261 -0
  97. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +165 -0
  98. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +111 -0
  99. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +107 -0
  100. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +61 -0
  101. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +88 -0
  102. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +115 -0
  103. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +214 -0
  104. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +80 -0
  105. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +93 -0
  106. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +63 -0
  107. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +99 -0
  108. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +142 -0
  109. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +25 -0
  110. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +196 -0
  111. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +113 -0
  112. package/project/.sdk/tm/clojure/src/sdk/core.clj +9 -0
  113. package/project/.sdk/tm/clojure/src/sdk/features.clj +13 -1
  114. package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +547 -0
  115. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +103 -14
  116. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
  117. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
  118. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
  119. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
  120. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
  121. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
  122. package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +889 -0
  123. package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +196 -0
  124. package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +70 -0
  125. package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +505 -0
  126. package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +52 -0
  127. package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +285 -0
  128. package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +55 -0
  129. package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +228 -0
  130. package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +102 -0
  131. package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +256 -0
  132. package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +1379 -0
  133. package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +177 -0
  134. package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +326 -0
  135. package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +295 -0
  136. package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +113 -0
  137. package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +177 -0
  138. package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +198 -0
  139. package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +95 -0
  140. package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +351 -0
  141. package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +196 -0
  142. package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +325 -0
  143. package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +195 -0
  144. package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +192 -0
  145. package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +75 -0
  146. package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +112 -0
  147. package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +167 -0
  148. package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +221 -0
  149. package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +213 -0
  150. package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +155 -0
  151. package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +169 -0
  152. package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +172 -0
  153. package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +240 -0
  154. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +192 -0
  155. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +503 -0
  156. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +775 -0
  157. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +1702 -0
  158. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
  159. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
  160. package/project/.sdk/tm/csharp/utility/MakeOptions.cs +10 -0
  161. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
  162. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +118 -0
  163. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +56 -0
  164. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +320 -0
  165. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +205 -0
  166. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +166 -0
  167. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +13 -0
  168. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +73 -0
  169. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +185 -0
  170. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +1182 -0
  171. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +139 -0
  172. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +132 -0
  173. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +179 -0
  174. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +99 -0
  175. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +129 -0
  176. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +59 -0
  177. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +190 -0
  178. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +136 -0
  179. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +42 -0
  180. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +368 -0
  181. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +257 -0
  182. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +160 -0
  183. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +127 -0
  184. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +96 -0
  185. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +124 -0
  186. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +162 -0
  187. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +627 -0
  188. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +134 -0
  189. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +125 -0
  190. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +152 -0
  191. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +80 -0
  192. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +101 -0
  193. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +176 -0
  194. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +67 -0
  195. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +536 -0
  196. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +662 -0
  197. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +824 -0
  198. package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +1072 -0
  199. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
  200. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
  201. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
  202. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  203. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  204. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  205. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  206. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  207. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
  208. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  209. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
  210. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  211. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  212. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  213. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  214. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  215. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  216. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  217. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +2 -2
  218. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
  219. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
  220. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
  221. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
  222. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
  223. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +2 -2
  224. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +2 -2
  225. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +2 -2
  226. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
  227. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
  228. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
  229. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +2 -2
  230. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +2 -2
  231. package/project/.sdk/tm/go/feature/secrets_feature.go +16 -0
  232. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +123 -0
  233. package/project/.sdk/tm/go/test/omni/omni.go +2 -2
  234. package/project/.sdk/tm/go/test/omni/util.go +2 -2
  235. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
  236. package/project/.sdk/tm/java/feature/SecretsFeature.java +766 -0
  237. package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +181 -0
  238. package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +64 -0
  239. package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +433 -0
  240. package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +54 -0
  241. package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +292 -0
  242. package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +49 -0
  243. package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +204 -0
  244. package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +93 -0
  245. package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +244 -0
  246. package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +1196 -0
  247. package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +173 -0
  248. package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +339 -0
  249. package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +274 -0
  250. package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +94 -0
  251. package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +37 -0
  252. package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +172 -0
  253. package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +171 -0
  254. package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +89 -0
  255. package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +232 -0
  256. package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +198 -0
  257. package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +142 -0
  258. package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +229 -0
  259. package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +302 -0
  260. package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +21 -0
  261. package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +698 -0
  262. package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +100 -0
  263. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +294 -0
  264. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +164 -0
  265. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +161 -0
  266. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +103 -0
  267. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +143 -0
  268. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +186 -0
  269. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +192 -0
  270. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +139 -0
  271. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +143 -0
  272. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +80 -0
  273. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +138 -0
  274. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +243 -0
  275. package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +986 -0
  276. package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
  277. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
  278. package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
  279. package/project/.sdk/tm/java/utility/MakeOptions.java +7 -0
  280. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  281. package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +431 -0
  282. package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +119 -0
  283. package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +42 -0
  284. package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +323 -0
  285. package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +196 -0
  286. package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +120 -0
  287. package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +48 -0
  288. package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +150 -0
  289. package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +949 -0
  290. package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +35 -0
  291. package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +165 -0
  292. package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +94 -0
  293. package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +106 -0
  294. package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +59 -0
  295. package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +79 -0
  296. package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +100 -0
  297. package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +574 -0
  298. package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +56 -0
  299. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +188 -0
  300. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +135 -0
  301. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +128 -0
  302. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +67 -0
  303. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +115 -0
  304. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +139 -0
  305. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +93 -0
  306. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +99 -0
  307. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +111 -0
  308. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +105 -0
  309. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +157 -0
  310. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +119 -0
  311. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +39 -0
  312. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +40 -0
  313. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +21 -0
  314. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +42 -0
  315. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +18 -0
  316. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +151 -0
  317. package/project/.sdk/tm/js/src/utility/StructUtility.js +1 -1
  318. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +946 -0
  319. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  320. package/project/.sdk/tm/js/test/vendor/omni/runner.js +1 -1
  321. package/project/.sdk/tm/js/test/vendor/omni/util.js +1 -1
  322. package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +659 -0
  323. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +117 -0
  324. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +40 -0
  325. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +322 -0
  326. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +227 -0
  327. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +163 -0
  328. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +57 -0
  329. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +179 -0
  330. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +1131 -0
  331. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +241 -0
  332. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +180 -0
  333. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +64 -0
  334. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +124 -0
  335. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +125 -0
  336. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +66 -0
  337. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +171 -0
  338. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +132 -0
  339. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +359 -0
  340. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +21 -0
  341. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +308 -0
  342. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +525 -0
  343. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +126 -0
  344. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +205 -0
  345. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +251 -0
  346. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +145 -0
  347. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +130 -0
  348. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +77 -0
  349. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +119 -0
  350. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +156 -0
  351. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +219 -0
  352. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +114 -0
  353. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +114 -0
  354. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +118 -0
  355. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +220 -0
  356. package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +1148 -0
  357. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
  358. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
  359. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
  360. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  361. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
  362. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
  363. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
  364. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
  365. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  366. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  367. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
  368. package/project/.sdk/tm/perl/Makefile +6 -1
  369. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +141 -0
  370. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +65 -0
  371. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +346 -0
  372. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +216 -0
  373. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +176 -0
  374. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +59 -0
  375. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +157 -0
  376. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +1139 -0
  377. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +187 -0
  378. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +100 -0
  379. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +119 -0
  380. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +71 -0
  381. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +251 -0
  382. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +122 -0
  383. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +70 -0
  384. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +263 -0
  385. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +159 -0
  386. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +180 -0
  387. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +92 -0
  388. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +138 -0
  389. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +213 -0
  390. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +173 -0
  391. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +132 -0
  392. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +132 -0
  393. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +102 -0
  394. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +132 -0
  395. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +190 -0
  396. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +124 -0
  397. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +301 -0
  398. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +605 -0
  399. package/project/.sdk/tm/perl/feature/secrets_feature.pm +675 -0
  400. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  401. package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +957 -0
  402. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  403. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  404. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  405. package/project/.sdk/tm/php/feature/SecretsFeature.php +670 -0
  406. package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +226 -0
  407. package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +75 -0
  408. package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +444 -0
  409. package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +262 -0
  410. package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +202 -0
  411. package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +74 -0
  412. package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +195 -0
  413. package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +1514 -0
  414. package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +260 -0
  415. package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +129 -0
  416. package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +169 -0
  417. package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +79 -0
  418. package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +348 -0
  419. package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +163 -0
  420. package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +40 -0
  421. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +274 -0
  422. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +170 -0
  423. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +163 -0
  424. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +106 -0
  425. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +144 -0
  426. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +194 -0
  427. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +113 -0
  428. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +131 -0
  429. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +150 -0
  430. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +101 -0
  431. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +146 -0
  432. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +161 -0
  433. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +129 -0
  434. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +322 -0
  435. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +724 -0
  436. package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +1067 -0
  437. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
  438. package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
  439. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  440. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  441. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  442. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  443. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  444. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  445. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
  446. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  447. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
  448. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  449. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  450. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  451. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  452. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  453. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  454. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +2 -2
  455. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  456. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +1 -1
  457. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  458. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  459. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  460. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  461. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +1 -1
  462. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  463. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +1 -1
  464. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  465. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  466. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  467. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
  468. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +1 -1
  469. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  470. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  471. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +1 -1
  472. package/project/.sdk/tm/py/test/voxgig_omni/util.py +1 -1
  473. package/project/.sdk/tm/rb/Makefile +7 -1
  474. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +118 -0
  475. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +55 -0
  476. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +315 -0
  477. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +197 -0
  478. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +143 -0
  479. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +52 -0
  480. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +147 -0
  481. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +1079 -0
  482. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +169 -0
  483. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +93 -0
  484. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +112 -0
  485. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +56 -0
  486. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +99 -0
  487. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +106 -0
  488. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +24 -0
  489. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +111 -0
  490. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +200 -0
  491. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +130 -0
  492. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +121 -0
  493. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +66 -0
  494. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +107 -0
  495. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +137 -0
  496. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +136 -0
  497. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +97 -0
  498. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +104 -0
  499. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +113 -0
  500. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +127 -0
  501. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +210 -0
  502. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +465 -0
  503. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +30 -0
  504. package/project/.sdk/tm/rb/feature/secrets_feature.rb +561 -0
  505. package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +842 -0
  506. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
  507. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
  508. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
  509. package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +130 -0
  510. package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +114 -0
  511. package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +416 -0
  512. package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +245 -0
  513. package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +200 -0
  514. package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +90 -0
  515. package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +231 -0
  516. package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +1565 -0
  517. package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +18 -0
  518. package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +226 -0
  519. package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +137 -0
  520. package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +148 -0
  521. package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +83 -0
  522. package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +132 -0
  523. package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +433 -0
  524. package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +174 -0
  525. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +146 -0
  526. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +230 -0
  527. package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +328 -0
  528. package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +184 -0
  529. package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +172 -0
  530. package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +102 -0
  531. package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +153 -0
  532. package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +228 -0
  533. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +537 -0
  534. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +300 -0
  535. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +137 -0
  536. package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +148 -0
  537. package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +165 -0
  538. package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +150 -0
  539. package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +144 -0
  540. package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +51 -0
  541. package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +637 -0
  542. package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +677 -0
  543. package/project/.sdk/tm/rust/feature/secrets.rs +961 -0
  544. package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +1509 -0
  545. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
  546. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
  547. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
  548. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
  549. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
  550. package/project/.sdk/tm/scala/Makefile +8 -3
  551. package/project/.sdk/tm/scala/feature/SecretsFeature.scala +556 -0
  552. package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +96 -0
  553. package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +270 -0
  554. package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +216 -0
  555. package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +144 -0
  556. package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +59 -0
  557. package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +149 -0
  558. package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +1089 -0
  559. package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +156 -0
  560. package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +169 -0
  561. package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +47 -0
  562. package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +107 -0
  563. package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +131 -0
  564. package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +53 -0
  565. package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +110 -0
  566. package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +157 -0
  567. package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +136 -0
  568. package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +302 -0
  569. package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +20 -0
  570. package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +281 -0
  571. package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +473 -0
  572. package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +123 -0
  573. package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +216 -0
  574. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +225 -0
  575. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +124 -0
  576. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +104 -0
  577. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +68 -0
  578. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +97 -0
  579. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +131 -0
  580. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +209 -0
  581. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +98 -0
  582. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +90 -0
  583. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +95 -0
  584. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +214 -0
  585. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +971 -0
  586. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
  587. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
  588. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
  589. package/project/.sdk/tm/scala/utility/Make.scala +7 -0
  590. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/SecretsFeature.swift +669 -0
  591. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +98 -0
  592. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +87 -0
  593. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +298 -0
  594. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +209 -0
  595. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +191 -0
  596. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +63 -0
  597. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +158 -0
  598. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +1141 -0
  599. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +192 -0
  600. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +183 -0
  601. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +130 -0
  602. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +141 -0
  603. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +59 -0
  604. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +125 -0
  605. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +198 -0
  606. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +139 -0
  607. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +271 -0
  608. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +173 -0
  609. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +139 -0
  610. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +198 -0
  611. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +86 -0
  612. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +129 -0
  613. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +175 -0
  614. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +310 -0
  615. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +140 -0
  616. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +118 -0
  617. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +105 -0
  618. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +111 -0
  619. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +297 -0
  620. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +120 -0
  621. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +452 -0
  622. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +25 -0
  623. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +689 -0
  624. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +755 -0
  625. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +9 -0
  626. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +30 -0
  627. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/feature/secrets/SecretsFeatureTest.swift +1030 -0
  628. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
  629. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
  630. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
  631. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  632. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  633. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  634. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  635. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  636. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
  637. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  638. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  639. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
  640. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  641. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  642. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  643. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  644. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  645. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  646. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  647. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  648. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  649. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  650. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  651. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  652. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  653. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  654. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  655. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  656. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  657. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  658. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  659. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  660. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  661. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
  662. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  663. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  664. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  665. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  666. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
  667. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +1 -1
  668. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  669. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  670. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  671. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +2 -2
  672. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +2 -2
  673. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +2 -2
  674. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +2 -2
  675. package/project/sdkgen-package.json +1 -4
  676. package/src/helpers/manifest.ts +81 -1
  677. package/src/helpers/modelNames.ts +284 -0
  678. package/src/helpers/naming.ts +45 -1
  679. package/src/sdkgen.ts +11 -1
  680. package/src/testkit.ts +115 -26
  681. package/src/utility.ts +17 -7
  682. package/project/.sdk/model/target/dart.aon +0 -58
  683. package/project/.sdk/model/target/lean.aon +0 -91
  684. package/project/.sdk/model/target/seneca-provider.aon +0 -120
  685. package/project/.sdk/src/cmp/dart/Config_dart.ts +0 -176
  686. package/project/.sdk/src/cmp/dart/EntityBase_dart.ts +0 -34
  687. package/project/.sdk/src/cmp/dart/EntityOperation_dart.ts +0 -43
  688. package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +0 -207
  689. package/project/.sdk/src/cmp/dart/Entity_dart.ts +0 -87
  690. package/project/.sdk/src/cmp/dart/Gitignore_dart.ts +0 -34
  691. package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +0 -33
  692. package/project/.sdk/src/cmp/dart/Main_dart.ts +0 -106
  693. package/project/.sdk/src/cmp/dart/Package_dart.ts +0 -82
  694. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +0 -177
  695. package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +0 -238
  696. package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +0 -53
  697. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +0 -152
  698. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +0 -59
  699. package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +0 -65
  700. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +0 -151
  701. package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +0 -63
  702. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +0 -225
  703. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +0 -397
  704. package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +0 -24
  705. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +0 -106
  706. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +0 -78
  707. package/project/.sdk/src/cmp/dart/SdkError_dart.ts +0 -42
  708. package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +0 -516
  709. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +0 -628
  710. package/project/.sdk/src/cmp/dart/Test_dart.ts +0 -116
  711. package/project/.sdk/src/cmp/dart/fragment/Config.data.fragment.dart +0 -79
  712. package/project/.sdk/src/cmp/dart/fragment/Config.fragment.dart +0 -51
  713. package/project/.sdk/src/cmp/dart/fragment/Direct.test.fragment.dart +0 -25
  714. package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +0 -29
  715. package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +0 -28
  716. package/project/.sdk/src/cmp/dart/fragment/EntityBase.fragment.dart +0 -302
  717. package/project/.sdk/src/cmp/dart/fragment/EntityCreateOp.fragment.dart +0 -98
  718. package/project/.sdk/src/cmp/dart/fragment/EntityListOp.fragment.dart +0 -90
  719. package/project/.sdk/src/cmp/dart/fragment/EntityLoadOp.fragment.dart +0 -102
  720. package/project/.sdk/src/cmp/dart/fragment/EntityRemoveOp.fragment.dart +0 -108
  721. package/project/.sdk/src/cmp/dart/fragment/EntityUpdateOp.fragment.dart +0 -102
  722. package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +0 -338
  723. package/project/.sdk/src/cmp/dart/fragment/SdkError.fragment.dart +0 -26
  724. package/project/.sdk/src/cmp/dart/tsconfig.json +0 -15
  725. package/project/.sdk/src/cmp/dart/utility_dart.ts +0 -155
  726. package/project/.sdk/src/cmp/lean/Config_lean.ts +0 -93
  727. package/project/.sdk/src/cmp/lean/Entity_lean.ts +0 -9
  728. package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +0 -18
  729. package/project/.sdk/src/cmp/lean/Main_lean.ts +0 -120
  730. package/project/.sdk/src/cmp/lean/Package_lean.ts +0 -93
  731. package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +0 -29
  732. package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +0 -19
  733. package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +0 -25
  734. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +0 -39
  735. package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +0 -25
  736. package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +0 -24
  737. package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +0 -22
  738. package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +0 -50
  739. package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +0 -40
  740. package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +0 -16
  741. package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +0 -23
  742. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +0 -19
  743. package/project/.sdk/src/cmp/lean/Test_lean.ts +0 -261
  744. package/project/.sdk/src/cmp/lean/utility_lean.ts +0 -129
  745. package/project/.sdk/src/cmp/seneca-provider/Extras_seneca-provider.ts +0 -4080
  746. package/project/.sdk/src/cmp/seneca-provider/Gitignore_seneca-provider.ts +0 -161
  747. package/project/.sdk/src/cmp/seneca-provider/Main_seneca-provider.ts +0 -1011
  748. package/project/.sdk/tm/dart/LICENSE +0 -22
  749. package/project/.sdk/tm/dart/Makefile +0 -50
  750. package/project/.sdk/tm/dart/lib/Context.dart +0 -150
  751. package/project/.sdk/tm/dart/lib/Control.dart +0 -15
  752. package/project/.sdk/tm/dart/lib/Operation.dart +0 -31
  753. package/project/.sdk/tm/dart/lib/Point.dart +0 -51
  754. package/project/.sdk/tm/dart/lib/Response.dart +0 -32
  755. package/project/.sdk/tm/dart/lib/Result.dart +0 -39
  756. package/project/.sdk/tm/dart/lib/Spec.dart +0 -49
  757. package/project/.sdk/tm/dart/lib/feature/audit/AuditFeature.dart +0 -103
  758. package/project/.sdk/tm/dart/lib/feature/base/BaseFeature.dart +0 -76
  759. package/project/.sdk/tm/dart/lib/feature/cache/CacheFeature.dart +0 -152
  760. package/project/.sdk/tm/dart/lib/feature/clienttrack/ClienttrackFeature.dart +0 -104
  761. package/project/.sdk/tm/dart/lib/feature/cost/CostFeature.dart +0 -446
  762. package/project/.sdk/tm/dart/lib/feature/debug/DebugFeature.dart +0 -153
  763. package/project/.sdk/tm/dart/lib/feature/idempotency/IdempotencyFeature.dart +0 -92
  764. package/project/.sdk/tm/dart/lib/feature/log/LogFeature.dart +0 -85
  765. package/project/.sdk/tm/dart/lib/feature/metrics/MetricsFeature.dart +0 -103
  766. package/project/.sdk/tm/dart/lib/feature/netsim/NetsimFeature.dart +0 -186
  767. package/project/.sdk/tm/dart/lib/feature/paging/PagingFeature.dart +0 -240
  768. package/project/.sdk/tm/dart/lib/feature/proxy/ProxyFeature.dart +0 -118
  769. package/project/.sdk/tm/dart/lib/feature/ratelimit/RatelimitFeature.dart +0 -103
  770. package/project/.sdk/tm/dart/lib/feature/rbac/RbacFeature.dart +0 -121
  771. package/project/.sdk/tm/dart/lib/feature/retry/RetryFeature.dart +0 -155
  772. package/project/.sdk/tm/dart/lib/feature/streaming/StreamingFeature.dart +0 -97
  773. package/project/.sdk/tm/dart/lib/feature/telemetry/TelemetryFeature.dart +0 -136
  774. package/project/.sdk/tm/dart/lib/feature/test/TestFeature.dart +0 -328
  775. package/project/.sdk/tm/dart/lib/feature/timeout/TimeoutFeature.dart +0 -104
  776. package/project/.sdk/tm/dart/lib/utility/CleanUtility.dart +0 -12
  777. package/project/.sdk/tm/dart/lib/utility/DoneUtility.dart +0 -18
  778. package/project/.sdk/tm/dart/lib/utility/ErrUtility.dart +0 -46
  779. package/project/.sdk/tm/dart/lib/utility/FeatureAddUtility.dart +0 -35
  780. package/project/.sdk/tm/dart/lib/utility/FeatureHookUtility.dart +0 -20
  781. package/project/.sdk/tm/dart/lib/utility/FeatureInitUtility.dart +0 -9
  782. package/project/.sdk/tm/dart/lib/utility/FetcherUtility.dart +0 -104
  783. package/project/.sdk/tm/dart/lib/utility/GraphqlUtility.dart +0 -162
  784. package/project/.sdk/tm/dart/lib/utility/MakeContextUtility.dart +0 -6
  785. package/project/.sdk/tm/dart/lib/utility/MakeErrorUtility.dart +0 -71
  786. package/project/.sdk/tm/dart/lib/utility/MakeFetchDefUtility.dart +0 -42
  787. package/project/.sdk/tm/dart/lib/utility/MakeOptionsUtility.dart +0 -233
  788. package/project/.sdk/tm/dart/lib/utility/MakePointUtility.dart +0 -130
  789. package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +0 -66
  790. package/project/.sdk/tm/dart/lib/utility/MakeResponseUtility.dart +0 -59
  791. package/project/.sdk/tm/dart/lib/utility/MakeResultUtility.dart +0 -49
  792. package/project/.sdk/tm/dart/lib/utility/MakeSpecUtility.dart +0 -77
  793. package/project/.sdk/tm/dart/lib/utility/MakeUrlUtility.dart +0 -51
  794. package/project/.sdk/tm/dart/lib/utility/ParamUtility.dart +0 -56
  795. package/project/.sdk/tm/dart/lib/utility/PrepareAuthUtility.dart +0 -46
  796. package/project/.sdk/tm/dart/lib/utility/PrepareBodyUtility.dart +0 -19
  797. package/project/.sdk/tm/dart/lib/utility/PrepareHeadersUtility.dart +0 -11
  798. package/project/.sdk/tm/dart/lib/utility/PrepareMethodUtility.dart +0 -30
  799. package/project/.sdk/tm/dart/lib/utility/PrepareParamsUtility.dart +0 -23
  800. package/project/.sdk/tm/dart/lib/utility/PreparePathUtility.dart +0 -9
  801. package/project/.sdk/tm/dart/lib/utility/PrepareQueryUtility.dart +0 -18
  802. package/project/.sdk/tm/dart/lib/utility/ResultBasicUtility.dart +0 -29
  803. package/project/.sdk/tm/dart/lib/utility/ResultBodyUtility.dart +0 -15
  804. package/project/.sdk/tm/dart/lib/utility/ResultHeadersUtility.dart +0 -18
  805. package/project/.sdk/tm/dart/lib/utility/StructUtility.dart +0 -127
  806. package/project/.sdk/tm/dart/lib/utility/TransformRequestUtility.dart +0 -28
  807. package/project/.sdk/tm/dart/lib/utility/TransformResponseUtility.dart +0 -44
  808. package/project/.sdk/tm/dart/lib/utility/Utility.dart +0 -239
  809. package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +0 -2462
  810. package/project/.sdk/tm/dart/src/feature/README.md +0 -3
  811. package/project/.sdk/tm/dart/src/feature/proxy/.gitkeep +0 -0
  812. package/project/.sdk/tm/dart/src/feature/ratelimit/.gitkeep +0 -0
  813. package/project/.sdk/tm/dart/src/feature/rbac/.gitkeep +0 -0
  814. package/project/.sdk/tm/dart/src/feature/retry/.gitkeep +0 -0
  815. package/project/.sdk/tm/dart/src/feature/streaming/.gitkeep +0 -0
  816. package/project/.sdk/tm/dart/src/feature/telemetry/.gitkeep +0 -0
  817. package/project/.sdk/tm/dart/src/feature/test/.gitkeep +0 -0
  818. package/project/.sdk/tm/dart/src/feature/timeout/.gitkeep +0 -0
  819. package/project/.sdk/tm/dart/test/custom_test.dart +0 -65
  820. package/project/.sdk/tm/dart/test/exists_test.dart +0 -12
  821. package/project/.sdk/tm/dart/test/feature/harness.dart +0 -329
  822. package/project/.sdk/tm/dart/test/feature_test.dart +0 -1193
  823. package/project/.sdk/tm/dart/test/harness.dart +0 -153
  824. package/project/.sdk/tm/dart/test/netsim_test.dart +0 -48
  825. package/project/.sdk/tm/dart/test/omni.dart +0 -520
  826. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +0 -143
  827. package/project/.sdk/tm/dart/test/pipeline_test.dart +0 -608
  828. package/project/.sdk/tm/dart/test/primary_test.dart +0 -476
  829. package/project/.sdk/tm/dart/test/sdk-test-control.json +0 -19
  830. package/project/.sdk/tm/dart/test/struct_test.dart +0 -468
  831. package/project/.sdk/tm/dart/test/utility.dart +0 -198
  832. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +0 -7
  833. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +0 -653
  834. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +0 -232
  835. package/project/.sdk/tm/lean/LICENSE +0 -21
  836. package/project/.sdk/tm/lean/Makefile +0 -32
  837. package/project/.sdk/tm/lean/VERSION +0 -1
  838. package/project/.sdk/tm/lean/src/SdkFeature.lean +0 -171
  839. package/project/.sdk/tm/lean/src/SdkFeatures.lean +0 -787
  840. package/project/.sdk/tm/lean/src/SdkJson.lean +0 -134
  841. package/project/.sdk/tm/lean/src/SdkRuntime.lean +0 -374
  842. package/project/.sdk/tm/lean/src/SdkUtility.lean +0 -809
  843. package/project/.sdk/tm/lean/src/VoxgigStruct.lean +0 -2880
  844. package/project/.sdk/tm/lean/src/Vregex.lean +0 -412
  845. package/project/.sdk/tm/lean/src/feature/README.md +0 -5
  846. package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
  847. package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
  848. package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
  849. package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
  850. package/project/.sdk/tm/lean/src/feature/cost/.gitkeep +0 -0
  851. package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
  852. package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
  853. package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
  854. package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
  855. package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
  856. package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
  857. package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
  858. package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
  859. package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
  860. package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
  861. package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
  862. package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
  863. package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
  864. package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
  865. package/project/.sdk/tm/lean/test/OmniResolver.lean +0 -358
  866. package/project/.sdk/tm/lean/test/OmniSmoke.lean +0 -174
  867. package/project/.sdk/tm/lean/test/StructCorpus.lean +0 -368
  868. package/project/.sdk/tm/lean/test/TFeature.lean +0 -281
  869. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +0 -227
  870. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +0 -997
  871. package/project/.sdk/tm/seneca-provider/CODE_OF_CONDUCT.md +0 -132
  872. package/project/.sdk/tm/seneca-provider/LICENSE +0 -21
  873. package/project/.sdk/tm/seneca-provider/Makefile +0 -15
  874. package/project/.sdk/tm/seneca-provider/src/tsconfig.json +0 -18
  875. package/project/.sdk/tm/seneca-provider/test/tsconfig.json +0 -16
  876. package/project/.sdk/tm/seneca-provider/tsfmt.json +0 -3
  877. /package/project/.sdk/tm/{dart/src/feature/audit → clojure/src/feature/secrets}/.gitkeep +0 -0
  878. /package/project/.sdk/tm/{dart/src/feature/base → csharp/src/feature/secrets}/.gitkeep +0 -0
  879. /package/project/.sdk/tm/{dart/src/feature/cache → elixir/src/feature/secrets}/.gitkeep +0 -0
  880. /package/project/.sdk/tm/{dart/src/feature/clienttrack → java/src/feature/secrets}/.gitkeep +0 -0
  881. /package/project/.sdk/tm/{dart/src/feature/cost → kotlin/src/feature/secrets}/.gitkeep +0 -0
  882. /package/project/.sdk/tm/{dart/src/feature/debug → perl/src/feature/secrets}/.gitkeep +0 -0
  883. /package/project/.sdk/tm/{dart/src/feature/idempotency → php/src/feature/secrets}/.gitkeep +0 -0
  884. /package/project/.sdk/tm/{dart/src/feature/log → rb/src/feature/secrets}/.gitkeep +0 -0
  885. /package/project/.sdk/tm/{dart/src/feature/metrics → rust/src/feature/secrets}/.gitkeep +0 -0
  886. /package/project/.sdk/tm/{dart/src/feature/netsim → scala/src/feature/secrets}/.gitkeep +0 -0
  887. /package/project/.sdk/tm/{dart/src/feature/paging → swift/src/feature/secrets}/.gitkeep +0 -0
@@ -0,0 +1,1067 @@
1
+ <?php
2
+ declare(strict_types=1);
3
+
4
+ // Behavioural tests for the secrets feature (vendored @voxgig/sekreto) -
5
+ // the php port of tm/ts/test/feature/secrets/Secrets.test.ts.
6
+ //
7
+ // The contract under test: the `apikey` OPTION keeps its exact old meaning
8
+ // and always wins, because the feature places it FIRST in the provider
9
+ // chain (a `memory` store named 'options') - explicit-beats-lookup falls
10
+ // out of sekreto's first-hit rule rather than from special-case logic. With
11
+ // the feature inactive nothing changes at all. With it active and the
12
+ // option unset, the chain (env, a custom provider, a vault) supplies the
13
+ // credential instead.
14
+ //
15
+ // This file lives in the test `feature/` container on purpose: `target add`
16
+ // trims it, along with the feature source and the vendored library, for a
17
+ // project whose model does not select `secrets`.
18
+ //
19
+ // The credential is asserted ON THE WIRE: a live-mode client with a
20
+ // recording system.fetch, driven through real entity operations AND through
21
+ // `direct()` and `graphql()`. An options-level assertion would pass for a
22
+ // port that never consults the value, and the raw paths run NO feature
23
+ // hooks - which is exactly why resolution lives at the transport seam.
24
+
25
+ require_once __DIR__ . '/../../../projectname_sdk.php';
26
+
27
+ use PHPUnit\Framework\TestCase;
28
+
29
+ // PLACEHOLDER-PREFIXED, all three classes in this file. A generated PHP SDK
30
+ // uses no namespaces and composer classmaps both `types/` and `test/`, so a
31
+ // bare `SecretsWire` here is a name an API entity could also claim - and PHP
32
+ // answers a redeclaration with a fatal, not a warning (helpers/naming.ts
33
+ // PHP_SDK_CLASSES, and test/php-sdk-classes.test.ts). `ProjectName`
34
+ // substitutes to this SDK's own name, which no bare entity type can equal.
35
+ //
36
+ // The recording transport: system.fetch for a LIVE client, scripting one
37
+ // status per API call (the last repeating) and a token endpoint for the
38
+ // exchange tests.
39
+ class ProjectNameSecretsWire
40
+ {
41
+ /** @var array<int,array<string,mixed>> */
42
+ public array $calls = [];
43
+ /** @var array<int,int> */
44
+ public array $apistatus = [200];
45
+ /** @var array<int,string> */
46
+ public array $tokens = ['ACCESS01', 'ACCESS02', 'ACCESS03'];
47
+ public string $tokenpath = 'auth/token';
48
+ public string $respfield = 'access_token';
49
+
50
+ private int $issued = 0;
51
+ private int $apicalls = 0;
52
+
53
+ // The callable the SDK options take as system.fetch.
54
+ public function fetch(): callable
55
+ {
56
+ return function (string $fullurl, array $fetchdef): array {
57
+ return $this->record($fullurl, $fetchdef);
58
+ };
59
+ }
60
+
61
+ public function record(string $fullurl, array $fetchdef): array
62
+ {
63
+ $headers = is_array($fetchdef['headers'] ?? null) ? $fetchdef['headers'] : [];
64
+ $this->calls[] = [
65
+ 'url' => $fullurl,
66
+ 'auth' => $headers['authorization'] ?? null,
67
+ 'has' => array_key_exists('authorization', $headers),
68
+ 'body' => $fetchdef['body'] ?? null,
69
+ ];
70
+
71
+ if ($this->istoken($fullurl)) {
72
+ $token = $this->tokens[min($this->issued, count($this->tokens) - 1)];
73
+ $this->issued++;
74
+ $payload = [$this->respfield => $token];
75
+ return [[
76
+ 'status' => 200, 'statusText' => 'OK', 'headers' => [],
77
+ 'json' => function () use ($payload) { return $payload; },
78
+ ], null];
79
+ }
80
+
81
+ $status = $this->apistatus[min($this->apicalls, count($this->apistatus) - 1)];
82
+ $this->apicalls++;
83
+ $payload = ['ok' => $status < 400];
84
+ return [[
85
+ 'status' => $status, 'statusText' => 'X', 'headers' => [],
86
+ 'json' => function () use ($payload) { return $payload; },
87
+ ], null];
88
+ }
89
+
90
+ /** The recorded calls that did NOT go to the token endpoint. */
91
+ public function api(): array
92
+ {
93
+ return array_values(array_filter($this->calls,
94
+ fn(array $c) => !$this->istoken((string)$c['url'])));
95
+ }
96
+
97
+ public function token(): array
98
+ {
99
+ return array_values(array_filter($this->calls,
100
+ fn(array $c) => $this->istoken((string)$c['url'])));
101
+ }
102
+
103
+ private function istoken(string $url): bool
104
+ {
105
+ return str_ends_with($url, '/' . $this->tokenpath);
106
+ }
107
+ }
108
+
109
+ class ProjectNameSecretsTest extends TestCase
110
+ {
111
+ // The env-var base for this SDK, as every other generated env var
112
+ // spells it.
113
+ private const ENVPREFIX = 'PROJECTENV_TEST_SECRETS_';
114
+
115
+ /** @var array<int,string> */
116
+ private array $touched = [];
117
+
118
+ protected function tearDown(): void
119
+ {
120
+ foreach ($this->touched as $name) {
121
+ putenv(self::ENVPREFIX . $name);
122
+ }
123
+ $this->touched = [];
124
+ }
125
+
126
+ private function setenv(string $name, string $value): void
127
+ {
128
+ $this->touched[] = $name;
129
+ putenv(self::ENVPREFIX . $name . '=' . $value);
130
+ }
131
+
132
+ private function clearenv(string $name): void
133
+ {
134
+ $this->touched[] = $name;
135
+ putenv(self::ENVPREFIX . $name);
136
+ }
137
+
138
+ // -----------------------------------------------------------------
139
+ // Support.
140
+
141
+ // The Authorization header carries the SPEC's credential prefix, which
142
+ // a TEMPLATE cannot know - so assert on the CREDENTIAL and let the
143
+ // prefix be whatever this SDK's API declares.
144
+ private function assertCredential(mixed $header, string $token): void
145
+ {
146
+ $ok = $header === $token
147
+ || (is_string($header) && str_ends_with($header, ' ' . $token));
148
+ $this->assertTrue($ok,
149
+ 'expected the authorization header to carry ' . $token .
150
+ ', got: ' . var_export($header, true));
151
+ }
152
+
153
+ private function secretsFeatureOf($client): ?ProjectNameSecretsFeature
154
+ {
155
+ foreach ($client->features as $f) {
156
+ if ($f instanceof ProjectNameSecretsFeature) {
157
+ return $f;
158
+ }
159
+ }
160
+ return null;
161
+ }
162
+
163
+ // Construct the client and ADOPT the feature via `extend` ONLY when the
164
+ // generated config did not already install it - when this SDK was
165
+ // generated with `secrets` model-active, the ordinary factory path
166
+ // builds the instance, and adding a second via extend would DOUBLE the
167
+ // feature: two transport wraps, two resolutions, and a token purchase
168
+ // the assertions cannot account for. (go's withSecrets, py's
169
+ // _has_feature and rb's with_secrets guard the same way.)
170
+ private function withSecrets(callable $build)
171
+ {
172
+ $client = $build(false);
173
+ if ($this->secretsFeatureOf($client) === null) {
174
+ $client = $build(true);
175
+ }
176
+ return $client;
177
+ }
178
+
179
+ /** @return array<string,mixed> */
180
+ private function secretsOpts(array $extra = []): array
181
+ {
182
+ $fopts = array_merge([
183
+ 'active' => true,
184
+ 'providers' => [['kind' => 'env', 'prefix' => self::ENVPREFIX]],
185
+ ], $extra);
186
+ return ['secrets' => $fopts];
187
+ }
188
+
189
+ // A LIVE client carrying the secrets feature, wired to the recorder.
190
+ private function secretsClient(ProjectNameSecretsWire $wire, array $sdkopts = [])
191
+ {
192
+ $opts = array_merge([
193
+ 'base' => 'http://secrets.test/api',
194
+ 'system' => ['fetch' => $wire->fetch()],
195
+ ], $sdkopts);
196
+
197
+ return $this->withSecrets(function (bool $adopt) use ($opts) {
198
+ if ($adopt) {
199
+ $opts['extend'] = [new ProjectNameSecretsFeature()];
200
+ }
201
+ return new ProjectNameSDK($opts);
202
+ });
203
+ }
204
+
205
+ // A custom provider, as php's option pipeline can carry one: an ARRAY
206
+ // OF CALLABLES. `Struct::clone` flattens a class instance to a stdClass
207
+ // (its methods lost) but leaves closures alone, so this is the shape a
208
+ // provider written in code must take - the exact parallel of the ts
209
+ // object literal, and py's `_LiveProvider` contract.
210
+ private function customProvider(callable $lookup, ?callable $describe = null): array
211
+ {
212
+ $spec = ['lookup' => $lookup];
213
+ if ($describe !== null) {
214
+ $spec['describe'] = $describe;
215
+ }
216
+ return $spec;
217
+ }
218
+
219
+ // The entity accessors this SDK generated ($client->Moon(),
220
+ // $client->Planet(), ...). Read off the class rather than from a name
221
+ // convention: this file is a TEMPLATE and no project's entity names are
222
+ // known here.
223
+ private function entityAccessors($client): array
224
+ {
225
+ $out = [];
226
+ $rc = new \ReflectionClass($client);
227
+ foreach ($rc->getMethods(\ReflectionMethod::IS_PUBLIC) as $m) {
228
+ if ($m->isStatic() || $m->isConstructor()) {
229
+ continue;
230
+ }
231
+ if (1 === preg_match('/^[A-Z]/', $m->getName())) {
232
+ $out[] = $m->getName();
233
+ }
234
+ }
235
+ return $out;
236
+ }
237
+
238
+ // Perform real entity operations until `stop` reports the observable
239
+ // state the test is waiting for. Each op's own outcome is irrelevant (no
240
+ // seeded data, a scripted response); an op the API does not define fails
241
+ // before it reaches the transport, which is why several may need
242
+ // driving.
243
+ private function driveUntil($client, string $what, callable $stop): void
244
+ {
245
+ foreach ($this->entityAccessors($client) as $accessor) {
246
+ try {
247
+ $ent = $client->$accessor();
248
+ } catch (\Throwable $e) {
249
+ continue;
250
+ }
251
+ foreach (['list', 'load'] as $opname) {
252
+ if (!method_exists($ent, $opname)) {
253
+ continue;
254
+ }
255
+ try {
256
+ $ent->$opname();
257
+ } catch (\Throwable $e) {
258
+ // The op's own failure is not the assertion.
259
+ }
260
+ if ($stop()) {
261
+ return;
262
+ }
263
+ }
264
+ }
265
+ $this->fail('no entity operation ' . $what . ' - nothing to assert on');
266
+ }
267
+
268
+ // Drive ops until one request reached the recorder.
269
+ private function driveOp($client, ProjectNameSecretsWire $wire): void
270
+ {
271
+ $before = count($wire->api());
272
+ $this->driveUntil($client, 'reached the transport',
273
+ fn() => $before < count($wire->api()));
274
+ }
275
+
276
+ // -----------------------------------------------------------------
277
+ // The feature-inactive baseline: bit-identical behaviour.
278
+
279
+ public function testInactiveApikeyOptionBehavesExactlyAsBefore(): void
280
+ {
281
+ $client = ProjectNameSDK::test(null, ['apikey' => 'OPTKEY01']);
282
+ $fetchdef = $client->prepare(['path' => '/']);
283
+ $this->assertCredential($fetchdef['headers']['authorization'] ?? null, 'OPTKEY01');
284
+
285
+ $this->assertNull($this->secretsFeatureOf($client),
286
+ 'no activation and no extend: the feature must not be installed');
287
+ }
288
+
289
+ public function testInactiveNoApikeyMeansNoAuthorizationHeader(): void
290
+ {
291
+ $client = ProjectNameSDK::test(null, null);
292
+ $fetchdef = $client->prepare(['path' => '/']);
293
+ $this->assertArrayNotHasKey('authorization', $fetchdef['headers']);
294
+ }
295
+
296
+ // -----------------------------------------------------------------
297
+ // Active: the provider chain, driven through real entity operations.
298
+
299
+ public function testApikeyOptionStillWinsOverTheChain(): void
300
+ {
301
+ $this->setenv('APIKEY', 'ENVKEY01');
302
+ $wire = new ProjectNameSecretsWire();
303
+ $client = $this->secretsClient($wire, [
304
+ 'apikey' => 'OPTKEY01',
305
+ 'feature' => $this->secretsOpts(),
306
+ ]);
307
+
308
+ $this->driveOp($client, $wire);
309
+ $this->assertCredential($wire->api()[0]['auth'], 'OPTKEY01');
310
+
311
+ // The explicit option is a real store, not a special case: a
312
+ // directed read names it like any other.
313
+ $feature = $this->secretsFeatureOf($client);
314
+ $this->assertNotNull($feature, 'the extend seam did not install the feature');
315
+ $this->assertSame('OPTKEY01', $feature->sekreto()->getfrom('options', 'apikey'));
316
+ }
317
+
318
+ public function testAnOmittedApikeyDefersToTheChainAtTheTransportSeam(): void
319
+ {
320
+ $this->setenv('APIKEY', 'ENVKEY02');
321
+ $wire = new ProjectNameSecretsWire();
322
+ $client = $this->secretsClient($wire, ['feature' => $this->secretsOpts()]);
323
+
324
+ // Before any op, nothing has been resolved.
325
+ $this->assertSame('', $client->options_map()['apikey']);
326
+
327
+ $this->driveOp($client, $wire);
328
+
329
+ // Resolution happens AT THE TRANSPORT - the one seam every wire path
330
+ // crosses - so the credential is ON THE WIRE, not merely resolved.
331
+ $this->assertCredential($wire->api()[0]['auth'], 'ENVKEY02');
332
+ $this->assertSame('ENVKEY02', $this->secretsFeatureOf($client)->credential());
333
+
334
+ // FEATURE STATE is the credential's only home. The options map -
335
+ // which `options_map()` hands to any caller, which every concurrent
336
+ // operation reads, and which a debug or audit feature may print -
337
+ // must be exactly as the caller left it: a vault secret has no
338
+ // business there. (go's `cred` field, secrets_feature.go, for the
339
+ // same reason.) The consequence is deliberate and documented: a
340
+ // chain-resolved credential is not visible to `prepare(...)`, which
341
+ // reports the OPTIONS. Publication cannot fix that anyway - nothing
342
+ // is resolved until a request crosses the transport, so the FIRST
343
+ // prepare() is unauthenticated either way, and with a broken chain
344
+ // publication yields a request carrying neither a credential nor an
345
+ // error.
346
+ $this->assertSame('', $client->options_map()['apikey'],
347
+ 'the chain credential must never be written into the client options');
348
+ }
349
+
350
+ // The same pin where it matters most: `auth: null` is the caller saying
351
+ // NO credential may be sent. Nothing goes on the wire - and nothing is
352
+ // parked in the options map either, where it would outlive the request
353
+ // and reach every reader of options_map().
354
+ public function testTheChainCredentialIsNeverParkedInTheOptionsMap(): void
355
+ {
356
+ $this->setenv('APIKEY', 'SHOULD_NOT_SEND');
357
+ $wire = new ProjectNameSecretsWire();
358
+ $client = $this->secretsClient($wire, [
359
+ 'auth' => null,
360
+ 'feature' => $this->secretsOpts(),
361
+ ]);
362
+
363
+ $this->driveOp($client, $wire);
364
+
365
+ $this->assertFalse($wire->api()[0]['has'],
366
+ 'auth null must suppress the credential, got ' .
367
+ var_export($wire->api()[0]['auth'], true));
368
+ $this->assertSame('', $client->options_map()['apikey'],
369
+ 'the suppressed secret was parked in the client options');
370
+
371
+ // Nor may it surface through the fetchdef prepare() builds.
372
+ $fetchdef = $client->prepare(['path' => '/']);
373
+ $this->assertArrayNotHasKey('authorization', $fetchdef['headers']);
374
+ }
375
+
376
+ public function testCustomProvidersAreAcceptedVerbatim(): void
377
+ {
378
+ $asked = [];
379
+ $wire = new ProjectNameSecretsWire();
380
+ $client = $this->secretsClient($wire, [
381
+ 'feature' => ['secrets' => [
382
+ 'active' => true,
383
+ 'providers' => [$this->customProvider(
384
+ function (string $name) use (&$asked) {
385
+ $asked[] = $name;
386
+ return 'CUSTOM01';
387
+ })],
388
+ ]],
389
+ ]);
390
+
391
+ $this->driveOp($client, $wire);
392
+ $this->assertCredential($wire->api()[0]['auth'], 'CUSTOM01');
393
+ $this->assertSame('apikey', $asked[0]);
394
+ }
395
+
396
+ // php cannot carry a provider CLASS INSTANCE through the option
397
+ // pipeline: `Struct::clone` flattens any object to a stdClass and its
398
+ // methods are lost. That must be a loud, directive failure rather than
399
+ // a chain that silently resolves nothing - and, being a failure, it
400
+ // must fail CLOSED.
401
+ public function testAProviderObjectIsRefusedWithAnActionableError(): void
402
+ {
403
+ $wire = new ProjectNameSecretsWire();
404
+ $client = $this->secretsClient($wire, [
405
+ 'feature' => ['secrets' => [
406
+ 'active' => true,
407
+ 'providers' => [new \stdClass()],
408
+ ]],
409
+ ]);
410
+
411
+ $res = $client->direct(['path' => '/probe']);
412
+ $this->assertFalse($res['ok'], 'a broken chain must refuse the request');
413
+ $this->assertStringContainsString(
414
+ 'A provider OBJECT cannot reach this feature', (string)$res['err']);
415
+ $this->assertCount(0, $wire->calls);
416
+ }
417
+
418
+ public function testAMissEverywhereLeavesTheHeaderOff(): void
419
+ {
420
+ $this->clearenv('APIKEY');
421
+ $wire = new ProjectNameSecretsWire();
422
+ $client = $this->secretsClient($wire, ['feature' => $this->secretsOpts()]);
423
+
424
+ $this->driveOp($client, $wire);
425
+ $this->assertFalse($wire->api()[0]['has'],
426
+ 'a chain MISS must fall through to an unauthenticated request, got ' .
427
+ var_export($wire->api()[0]['auth'], true));
428
+ }
429
+
430
+ public function testAProviderErrorFailsTheOpAndNothingReachesTheWire(): void
431
+ {
432
+ $asked = false;
433
+ $wire = new ProjectNameSecretsWire();
434
+ $client = $this->secretsClient($wire, [
435
+ 'feature' => ['secrets' => [
436
+ 'active' => true,
437
+ 'providers' => [$this->customProvider(
438
+ function (string $_name) use (&$asked) {
439
+ $asked = true;
440
+ throw new \Voxgig\Sekreto\SekretoError('vault unreachable');
441
+ })],
442
+ ]],
443
+ ]);
444
+
445
+ // A full closure, not an arrow function: `fn()` captures by VALUE at
446
+ // creation, so an arrow function here would keep reading the `false`
447
+ // the flag held before any provider ran, and the drive would give up
448
+ // without ever noticing the chain had been consulted.
449
+ $this->driveUntil($client, 'consulted the chain',
450
+ function () use (&$asked) { return $asked; });
451
+
452
+ $this->assertCount(0, $wire->api(),
453
+ 'a broken vault must never yield a request');
454
+ }
455
+
456
+ // The entity pipeline turns the refusal into a thrown SDK error
457
+ // carrying the feature's own code - never a silent unauthenticated
458
+ // send.
459
+ public function testAProviderErrorThrowsAnSdkErrorOnTheEntityPath(): void
460
+ {
461
+ $wire = new ProjectNameSecretsWire();
462
+ $client = $this->secretsClient($wire, [
463
+ 'feature' => ['secrets' => [
464
+ 'active' => true,
465
+ 'providers' => [$this->customProvider(
466
+ function (string $_name) {
467
+ throw new \Voxgig\Sekreto\SekretoError('vault unreachable');
468
+ })],
469
+ ]],
470
+ ]);
471
+
472
+ $accessor = $this->entityAccessors($client)[0] ?? null;
473
+ $this->assertNotNull($accessor, 'no entity accessor - nothing to assert on');
474
+
475
+ $caught = null;
476
+ try {
477
+ $client->$accessor()->list();
478
+ } catch (ProjectNameError $e) {
479
+ $caught = $e;
480
+ }
481
+
482
+ $this->assertNotNull($caught, 'the entity path must fail closed');
483
+ $this->assertStringContainsString('vault unreachable', $caught->msg);
484
+ $this->assertCount(0, $wire->api());
485
+ }
486
+
487
+ // MISS vs ERROR, the invariant the whole feature is worth having for,
488
+ // asserted as a PAIR on the same two-provider chain: a store that does
489
+ // not hold the secret falls through to the next one...
490
+ public function testAMissFallsThroughToTheNextProvider(): void
491
+ {
492
+ $this->setenv('APIKEY', 'ENVKEY04');
493
+ $asked = false;
494
+ $wire = new ProjectNameSecretsWire();
495
+ $client = $this->secretsClient($wire, [
496
+ 'feature' => ['secrets' => [
497
+ 'active' => true,
498
+ 'providers' => [
499
+ $this->customProvider(function (string $_name) use (&$asked) {
500
+ $asked = true;
501
+ return null;
502
+ }),
503
+ ['kind' => 'env', 'prefix' => self::ENVPREFIX],
504
+ ],
505
+ ]],
506
+ ]);
507
+
508
+ $this->driveOp($client, $wire);
509
+ $this->assertTrue($asked, 'the first provider was never consulted');
510
+ $this->assertCredential($wire->api()[0]['auth'], 'ENVKEY04');
511
+ }
512
+
513
+ // ...while a store that COULD NOT ANSWER fails the operation, even
514
+ // though the very next provider in the chain holds the secret. A broken
515
+ // vault never degrades into an unauthenticated - or a
516
+ // differently-authenticated - request.
517
+ public function testAnErrorFailsTheOpEvenThoughALaterProviderHasTheSecret(): void
518
+ {
519
+ $this->setenv('APIKEY', 'ENVKEY05');
520
+ $wire = new ProjectNameSecretsWire();
521
+ $client = $this->secretsClient($wire, [
522
+ 'feature' => ['secrets' => [
523
+ 'active' => true,
524
+ 'providers' => [
525
+ $this->customProvider(function (string $_name) {
526
+ throw new \Voxgig\Sekreto\SekretoError('vault unreachable');
527
+ }),
528
+ ['kind' => 'env', 'prefix' => self::ENVPREFIX],
529
+ ],
530
+ ]],
531
+ ]);
532
+
533
+ $res = $client->direct(['path' => '/probe']);
534
+ $this->assertFalse($res['ok'], 'an ERROR must not fall through to the next provider');
535
+ $this->assertSame('secrets_provider', $res['err']->sdk_code);
536
+ $this->assertCount(0, $wire->calls);
537
+ }
538
+
539
+ public function testAProviderRecoversAfterATransientFailure(): void
540
+ {
541
+ $calls = 0;
542
+ $wire = new ProjectNameSecretsWire();
543
+ $client = $this->secretsClient($wire, [
544
+ 'feature' => ['secrets' => [
545
+ 'active' => true,
546
+ 'providers' => [$this->customProvider(
547
+ function (string $_name) use (&$calls) {
548
+ $calls++;
549
+ if (1 === $calls) {
550
+ throw new \Voxgig\Sekreto\SekretoError('vault unreachable');
551
+ }
552
+ return 'RECOVERED01';
553
+ })],
554
+ ]],
555
+ ]);
556
+
557
+ // The first op fails closed; a failed resolution is never cached, so
558
+ // the next op asks the chain again and succeeds.
559
+ $this->driveUntil($client, 'consulted the chain',
560
+ function () use (&$calls) { return 0 < $calls; });
561
+ $this->assertCount(0, $wire->api(), 'the first op must not reach the wire');
562
+
563
+ $this->driveOp($client, $wire);
564
+ $this->assertCredential($wire->api()[0]['auth'], 'RECOVERED01');
565
+ }
566
+
567
+ // With `cache: false`, a provider that answered once and then reports a
568
+ // MISS (a revoked secret) must RETRACT the credential: nothing the
569
+ // feature resolved may keep going out on the wire.
570
+ public function testAnUncachedMissRetractsTheCredential(): void
571
+ {
572
+ $have = true;
573
+ $wire = new ProjectNameSecretsWire();
574
+ $client = $this->secretsClient($wire, [
575
+ 'feature' => ['secrets' => [
576
+ 'active' => true,
577
+ 'cache' => false,
578
+ 'providers' => [$this->customProvider(
579
+ function (string $_name) use (&$have) {
580
+ return $have ? 'REVOCABLE01' : null;
581
+ })],
582
+ ]],
583
+ ]);
584
+
585
+ $this->driveOp($client, $wire);
586
+ $this->assertCredential($wire->api()[0]['auth'], 'REVOCABLE01');
587
+
588
+ $have = false;
589
+
590
+ $this->driveOp($client, $wire);
591
+ $api = $wire->api();
592
+ $last = $api[count($api) - 1];
593
+ $this->assertFalse($last['has'] && '' !== (string)$last['auth'],
594
+ 'after the chain reports a miss the retracted credential must not go out; ' .
595
+ 'the wire saw ' . var_export($last['auth'], true));
596
+ }
597
+
598
+ public function testAuthNullSuppressesTheCredentialChainOrNoChain(): void
599
+ {
600
+ $this->setenv('APIKEY', 'ENVKEY03');
601
+ $wire = new ProjectNameSecretsWire();
602
+ $client = $this->secretsClient($wire, [
603
+ 'auth' => null,
604
+ 'apikey' => 'OPTKEY01',
605
+ 'feature' => $this->secretsOpts(),
606
+ ]);
607
+
608
+ $this->driveOp($client, $wire);
609
+
610
+ $this->assertFalse($wire->api()[0]['has'],
611
+ 'auth null must suppress the credential, got ' .
612
+ var_export($wire->api()[0]['auth'], true));
613
+
614
+ // The suppression survives option validation rather than being
615
+ // replaced by the optspec's default auth map.
616
+ $opts = $client->options_map();
617
+ $this->assertTrue(array_key_exists('auth', $opts),
618
+ 'options.auth must stay a present null');
619
+ $this->assertNull($opts['auth']);
620
+ }
621
+
622
+ // -----------------------------------------------------------------
623
+ // The RAW paths - direct and graphql - run no feature hooks at all, so
624
+ // for them the transport seam is the ONLY place resolution can happen.
625
+
626
+ public function testDirectCarriesTheChainCredentialAndFailsClosed(): void
627
+ {
628
+ $this->setenv('APIKEY', 'DIRECTKEY01');
629
+ $wire = new ProjectNameSecretsWire();
630
+ $client = $this->secretsClient($wire, ['feature' => $this->secretsOpts()]);
631
+
632
+ $res = $client->direct(['path' => '/direct-probe']);
633
+ $this->assertTrue($res['ok'], 'direct refused');
634
+ $this->assertCount(1, $wire->api());
635
+ $this->assertCredential($wire->api()[0]['auth'], 'DIRECTKEY01');
636
+
637
+ // And fail-closed holds for raw access too: a broken chain refuses
638
+ // the direct call before anything reaches the wire.
639
+ $brokenwire = new ProjectNameSecretsWire();
640
+ $broken = $this->secretsClient($brokenwire, [
641
+ 'feature' => ['secrets' => [
642
+ 'active' => true,
643
+ 'providers' => [$this->customProvider(function (string $_name) {
644
+ throw new \Voxgig\Sekreto\SekretoError('vault unreachable');
645
+ })],
646
+ ]],
647
+ ]);
648
+
649
+ $res = $broken->direct(['path' => '/direct-probe']);
650
+ $this->assertFalse($res['ok'], 'a broken chain must refuse the raw path fail-closed');
651
+ $this->assertSame('secrets_provider', $res['err']->sdk_code);
652
+ $this->assertCount(0, $brokenwire->calls,
653
+ 'a broken vault must never yield a request on the raw path');
654
+ }
655
+
656
+ public function testGraphqlCarriesTheChainCredentialAndFailsClosed(): void
657
+ {
658
+ $this->setenv('APIKEY', 'GQLKEY01');
659
+ $wire = new ProjectNameSecretsWire();
660
+ $client = $this->secretsClient($wire, ['feature' => $this->secretsOpts()]);
661
+
662
+ $client->graphql('{ probe }');
663
+ $this->assertCount(1, $wire->api());
664
+ $this->assertCredential($wire->api()[0]['auth'], 'GQLKEY01');
665
+
666
+ $brokenwire = new ProjectNameSecretsWire();
667
+ $broken = $this->secretsClient($brokenwire, [
668
+ 'feature' => ['secrets' => [
669
+ 'active' => true,
670
+ 'providers' => [$this->customProvider(function (string $_name) {
671
+ throw new \Voxgig\Sekreto\SekretoError('vault unreachable');
672
+ })],
673
+ ]],
674
+ ]);
675
+
676
+ $res = $broken->graphql('{ probe }');
677
+ $this->assertFalse($res['ok'], 'a broken chain must refuse graphql fail-closed');
678
+ $this->assertCount(0, $brokenwire->calls);
679
+ }
680
+
681
+ // -----------------------------------------------------------------
682
+ // The access-token exchange.
683
+
684
+ public function testTheRefreshTokenBuysAnAccessTokenAndASpentOneIsReboughtOnce(): void
685
+ {
686
+ $this->setenv('REFRESH_TOKEN', 'REFRESH01');
687
+ $wire = new ProjectNameSecretsWire();
688
+ // First API call is refused, the retry succeeds.
689
+ $wire->apistatus = [401, 200];
690
+
691
+ $client = $this->secretsClient($wire, [
692
+ 'feature' => $this->secretsOpts([
693
+ 'name' => 'refresh_token',
694
+ 'exchange' => ['active' => true],
695
+ ]),
696
+ ]);
697
+
698
+ $this->driveOp($client, $wire);
699
+
700
+ $this->assertCount(2, $wire->token(),
701
+ 'expected the initial purchase plus one rebuy');
702
+ $this->assertStringContainsString('REFRESH01', (string)$wire->token()[0]['body']);
703
+
704
+ $api = $wire->api();
705
+ $this->assertCount(2, $api, 'expected the request to be retried exactly once');
706
+ $this->assertCredential($api[0]['auth'], 'ACCESS01');
707
+ // The retry must carry the NEW token, not the spent one.
708
+ $this->assertCredential($api[1]['auth'], 'ACCESS02');
709
+ }
710
+
711
+ // A second refusal on a token bought moments ago is a real failure, not
712
+ // a spin: exactly one rebuy, and the refusal is returned as it stands.
713
+ public function testASecondRefusalIsReturnedAsIs(): void
714
+ {
715
+ $this->setenv('REFRESH_TOKEN', 'REFRESH01');
716
+ $wire = new ProjectNameSecretsWire();
717
+ $wire->apistatus = [401];
718
+
719
+ $client = $this->secretsClient($wire, [
720
+ 'feature' => $this->secretsOpts([
721
+ 'name' => 'refresh_token',
722
+ 'exchange' => ['active' => true],
723
+ ]),
724
+ ]);
725
+
726
+ $this->driveOp($client, $wire);
727
+
728
+ $this->assertCount(2, $wire->api(), 'one attempt plus one retry, no more');
729
+ $this->assertCount(2, $wire->token());
730
+ }
731
+
732
+ // Test mode buys nothing and needs no token endpoint, so an offline
733
+ // suite never makes the one HTTP call the test mock cannot stop.
734
+ public function testTestModeBuysNothingAndNeedsNoTokenEndpoint(): void
735
+ {
736
+ $this->setenv('REFRESH_TOKEN', 'REFRESH01');
737
+ $wire = new ProjectNameSecretsWire();
738
+
739
+ $client = $this->withSecrets(function (bool $adopt) use ($wire) {
740
+ $opts = [
741
+ 'system' => ['fetch' => $wire->fetch()],
742
+ 'feature' => $this->secretsOpts([
743
+ 'name' => 'refresh_token',
744
+ 'exchange' => ['active' => true],
745
+ ]),
746
+ ];
747
+ if ($adopt) {
748
+ $opts['extend'] = [new ProjectNameSecretsFeature()];
749
+ }
750
+ return ProjectNameSDK::test(null, $opts);
751
+ });
752
+
753
+ $this->driveUntil($client, 'resolved the fake token',
754
+ fn() => '' !== $this->secretsFeatureOf($client)->credential());
755
+
756
+ $this->assertCount(0, $wire->calls, 'test mode must not do IO');
757
+ // A deterministic placeholder, so offline suites need no
758
+ // configuration.
759
+ $this->assertSame('test-access_token',
760
+ $this->secretsFeatureOf($client)->credential());
761
+ }
762
+
763
+ // A failed PURCHASE answers with the API's own refusal, not the
764
+ // exchange error: the caller asked for data, and the 401 is the more
765
+ // useful of the two.
766
+ public function testAFailedPurchaseAnswersWithTheApisOwnRefusal(): void
767
+ {
768
+ $this->clearenv('REFRESH_TOKEN');
769
+ $wire = new ProjectNameSecretsWire();
770
+ $wire->apistatus = [401];
771
+
772
+ $client = $this->secretsClient($wire, [
773
+ 'apikey' => 'STALE01',
774
+ 'feature' => $this->secretsOpts([
775
+ 'name' => 'refresh_token',
776
+ 'exchange' => ['active' => true],
777
+ ]),
778
+ ]);
779
+
780
+ $res = $client->direct(['path' => '/probe']);
781
+
782
+ // 401 from the API, surfaced as the raw path's ok:false - not a
783
+ // token exchange error.
784
+ $this->assertFalse($res['ok']);
785
+ $this->assertSame(401, $res['status']);
786
+ $this->assertCount(1, $wire->api());
787
+ }
788
+
789
+ // The exchange with NO system.fetch: the raw fallback transport carries
790
+ // the purchase end to end over REAL HTTP, and the body is ENCODED - a
791
+ // refresh token full of JSON-hostile characters must arrive as that
792
+ // literal value.
793
+ // IN ITS OWN PROCESS, and this is the one lane that needs it. It is the
794
+ // only test in the suite that reaches the SDK's DEFAULT transport (no
795
+ // system.fetch anywhere - that is the point), and Fetcher::call decides
796
+ // "no fetcher was supplied" by asking whether `system.fetch` is an empty
797
+ // stdClass. The struct corpus suite that runs earlier in the same
798
+ // process writes a property onto Struct's shared UNDEF sentinel - the
799
+ // very object a missing path resolves to - so that check then answers
800
+ // "not a valid function" for every default-transport request in the
801
+ // process. A fresh process has a clean sentinel. See the followups: the
802
+ // fix belongs in Struct::setprop, which must refuse to write to its own
803
+ // sentinel, not here.
804
+ #[\PHPUnit\Framework\Attributes\RunInSeparateProcess]
805
+ #[\PHPUnit\Framework\Attributes\PreserveGlobalState(false)]
806
+ public function testTheExchangeWorksWithOrdinaryOptionsAndEncodesItsBody(): void
807
+ {
808
+ $tricky = "re\"fresh\\to\nken";
809
+
810
+ $stub = new ProjectNameSecretsHttpStub();
811
+ $port = $stub->start();
812
+ if (0 === $port) {
813
+ $this->markTestSkipped('could not start the local HTTP stub');
814
+ }
815
+
816
+ try {
817
+ $client = $this->withSecrets(function (bool $adopt) use ($port, $tricky) {
818
+ $opts = [
819
+ 'base' => 'http://127.0.0.1:' . $port . '/api',
820
+ 'feature' => ['secrets' => [
821
+ 'active' => true,
822
+ 'name' => 'refresh_token',
823
+ 'exchange' => ['active' => true, 'refresh' => $tricky],
824
+ ]],
825
+ ];
826
+ if ($adopt) {
827
+ $opts['extend'] = [new ProjectNameSecretsFeature()];
828
+ }
829
+ return new ProjectNameSDK($opts);
830
+ });
831
+
832
+ // No system.fetch anywhere: the API call takes the SDK's default
833
+ // transport and the token purchase takes the feature's raw
834
+ // fallback.
835
+ $res = $client->direct(['path' => '/probe']);
836
+ $this->assertTrue($res['ok'], 'the raw fallback exchange failed');
837
+ } finally {
838
+ $stub->stop();
839
+ }
840
+
841
+ $this->assertSame($tricky, $stub->refresh(),
842
+ 'the refresh token must arrive as its literal value (encoded, not concatenated)');
843
+ $this->assertCredential($stub->auth(), 'RAWTOK01');
844
+
845
+ // stop() must leave NOTHING behind. This is asserted, not assumed:
846
+ // a child spawned through a shell survives proc_terminate as an
847
+ // orphan that holds the port for the rest of the machine's life -
848
+ // and, because it inherits the run's own descriptors, holds a
849
+ // captured pipe open so that `make test | tee` (or any CI log
850
+ // capture) never returns. The temp directory is the second trace,
851
+ // one per run.
852
+ $leak = $stub->leak();
853
+ $this->assertNull($leak, 'the stub outlived stop(): ' . (string)$leak);
854
+ }
855
+
856
+ // -----------------------------------------------------------------
857
+ // The refusal is NOT retried. The gate lives at the transport, so a
858
+ // provider ERROR must fail the operation once - never spin the chain,
859
+ // and never let a later attempt through unauthenticated.
860
+ public function testAProviderErrorIsRefusedOnceAndNotRetried(): void
861
+ {
862
+ $calls = 0;
863
+ $wire = new ProjectNameSecretsWire();
864
+ $client = $this->secretsClient($wire, [
865
+ 'feature' => ['secrets' => [
866
+ 'active' => true,
867
+ 'providers' => [$this->customProvider(
868
+ function (string $_name) use (&$calls) {
869
+ $calls++;
870
+ throw new \Voxgig\Sekreto\SekretoError('vault unreachable');
871
+ })],
872
+ ]],
873
+ ]);
874
+
875
+ $accessor = $this->entityAccessors($client)[0] ?? null;
876
+ $this->assertNotNull($accessor);
877
+
878
+ try {
879
+ $client->$accessor()->list();
880
+ $this->fail('the op must fail closed');
881
+ } catch (ProjectNameError $e) {
882
+ // expected
883
+ }
884
+
885
+ $this->assertSame(1, $calls, 'the refusal must not be retried');
886
+ $this->assertCount(0, $wire->calls);
887
+ }
888
+ }
889
+
890
+ // A one-request-at-a-time HTTP stand-in, run as a child `php -S` process:
891
+ // the raw-fallback exchange has to be exercised over REAL HTTP (that is the
892
+ // whole point of the lane), and PHP has no threads to serve it in-process.
893
+ // Answers the token endpoint with an access token and every other path with
894
+ // an empty JSON body, recording what each request carried.
895
+ class ProjectNameSecretsHttpStub
896
+ {
897
+ private mixed $proc = null;
898
+ private string $dir = '';
899
+ private int $port = 0;
900
+
901
+ // What the server recorded, READ OFF DISK BY stop() before the temp
902
+ // directory goes: the assertions run after the `finally`, and a stub
903
+ // that cleans up after itself has no files left to answer from.
904
+ private ?string $refresh = null;
905
+ private ?string $auth = null;
906
+
907
+ public function start(): int
908
+ {
909
+ $this->dir = sys_get_temp_dir() . '/secrets-stub-' . bin2hex(random_bytes(6));
910
+ if (!@mkdir($this->dir, 0700, true)) {
911
+ $this->dir = '';
912
+ return 0;
913
+ }
914
+
915
+ $router = <<<'ROUTER'
916
+ <?php
917
+ $dir = __DIR__;
918
+ $path = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH) ?? '/';
919
+ if (str_ends_with($path, '/auth/token')) {
920
+ $raw = file_get_contents('php://input');
921
+ $parsed = json_decode((string)$raw, true);
922
+ file_put_contents($dir . '/refresh.txt',
923
+ is_array($parsed) ? (string)($parsed['refresh_token'] ?? '') : '');
924
+ header('content-type: application/json');
925
+ echo '{"access_token": "RAWTOK01"}';
926
+ return;
927
+ }
928
+ $auth = '';
929
+ foreach ($_SERVER as $k => $v) {
930
+ if ('HTTP_AUTHORIZATION' === $k) { $auth = (string)$v; }
931
+ }
932
+ file_put_contents($dir . '/auth.txt', $auth);
933
+ header('content-type: application/json');
934
+ echo '{}';
935
+ ROUTER;
936
+ file_put_contents($this->dir . '/router.php', $router);
937
+
938
+ // A free port: bind, read it, release it. The window between release
939
+ // and the server's own bind is the usual small race, and a failure
940
+ // to come up skips the test rather than failing it.
941
+ $probe = @stream_socket_server('tcp://127.0.0.1:0', $errno, $errstr);
942
+ if (false === $probe) {
943
+ $this->stop();
944
+ return 0;
945
+ }
946
+ $name = stream_socket_get_name($probe, false);
947
+ fclose($probe);
948
+ $port = (int)substr((string)$name, (int)strrpos((string)$name, ':') + 1);
949
+ if (0 === $port) {
950
+ $this->stop();
951
+ return 0;
952
+ }
953
+
954
+ // An ARRAY command, never a string. proc_open runs a STRING through
955
+ // `/bin/sh -c`, and the process it then hands back is the SHELL:
956
+ // proc_terminate would signal that, leaving `php -S` alive as an
957
+ // orphan holding the port - and, under `make test | tee` or any CI
958
+ // log capture, holding the pipe open so the run never ends. The
959
+ // array form execs the binary directly, so the child this object
960
+ // holds IS the server.
961
+ $cmd = [PHP_BINARY, '-S', '127.0.0.1:' . $port, $this->dir . '/router.php'];
962
+ // Every child descriptor is a FILE, never a pipe: a pipe end the
963
+ // parent never drains is a stall waiting to happen, and a test
964
+ // harness that captures output must not end up waiting on the
965
+ // server's.
966
+ $pipes = [];
967
+ $this->proc = @proc_open($cmd, [
968
+ 0 => ['file', '/dev/null', 'r'],
969
+ 1 => ['file', $this->dir . '/out.log', 'a'],
970
+ 2 => ['file', $this->dir . '/err.log', 'a'],
971
+ ], $pipes, $this->dir);
972
+
973
+ if (!is_resource($this->proc)) {
974
+ $this->stop();
975
+ return 0;
976
+ }
977
+
978
+ for ($i = 0; $i < 100; $i++) {
979
+ $sock = @stream_socket_client('tcp://127.0.0.1:' . $port, $e1, $e2, 0.2);
980
+ if (false !== $sock) {
981
+ fclose($sock);
982
+ $this->port = $port;
983
+ return $port;
984
+ }
985
+ usleep(50000);
986
+ }
987
+
988
+ $this->stop();
989
+ return 0;
990
+ }
991
+
992
+ // Stop the server and leave NOTHING behind - no process, no directory.
993
+ // Called from the test's `finally` and from every failure path in
994
+ // start(), which markTestSkipped() unwinds past before any `finally`
995
+ // exists.
996
+ public function stop(): void
997
+ {
998
+ // Read the recording out first: the files are about to go.
999
+ $this->refresh = $this->slurp('refresh.txt') ?? $this->refresh;
1000
+ $this->auth = $this->slurp('auth.txt') ?? $this->auth;
1001
+
1002
+ if (is_resource($this->proc)) {
1003
+ proc_terminate($this->proc);
1004
+ // proc_close REAPS the child, so the process is gone (not a
1005
+ // zombie) by the time this returns.
1006
+ proc_close($this->proc);
1007
+ $this->proc = null;
1008
+ }
1009
+
1010
+ if ('' !== $this->dir) {
1011
+ foreach ((array)@scandir($this->dir) as $f) {
1012
+ if ('.' !== $f && '..' !== $f) {
1013
+ @unlink($this->dir . '/' . $f);
1014
+ }
1015
+ }
1016
+ @rmdir($this->dir);
1017
+ }
1018
+ }
1019
+
1020
+ // Did stop() actually stop it? The two observable traces a leak leaves:
1021
+ // the port still answering (an orphaned server), and the temp directory
1022
+ // still on disk. Asserted by the test, so a stub that goes back to
1023
+ // leaking fails the suite instead of quietly filling /tmp and hanging
1024
+ // every piped run.
1025
+ public function leak(): ?string
1026
+ {
1027
+ if ('' !== $this->dir && is_dir($this->dir)) {
1028
+ return 'temp directory still on disk: ' . $this->dir;
1029
+ }
1030
+
1031
+ if (0 === $this->port) {
1032
+ return null;
1033
+ }
1034
+
1035
+ // The listener can take a moment to go after SIGTERM; a still-open
1036
+ // port after that is an orphan, not a race.
1037
+ for ($i = 0; $i < 40; $i++) {
1038
+ $sock = @stream_socket_client('tcp://127.0.0.1:' . $this->port, $e1, $e2, 0.2);
1039
+ if (false === $sock) {
1040
+ return null;
1041
+ }
1042
+ fclose($sock);
1043
+ usleep(50000);
1044
+ }
1045
+
1046
+ return 'a server is still listening on 127.0.0.1:' . $this->port;
1047
+ }
1048
+
1049
+ public function refresh(): ?string
1050
+ {
1051
+ return $this->slurp('refresh.txt') ?? $this->refresh;
1052
+ }
1053
+
1054
+ public function auth(): ?string
1055
+ {
1056
+ return $this->slurp('auth.txt') ?? $this->auth;
1057
+ }
1058
+
1059
+ private function slurp(string $file): ?string
1060
+ {
1061
+ if ('' === $this->dir) {
1062
+ return null;
1063
+ }
1064
+ $out = @file_get_contents($this->dir . '/' . $file);
1065
+ return false === $out ? null : $out;
1066
+ }
1067
+ }