@voxgig/sdkgen 4.9.0 → 4.11.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 (1159) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/helpers/manifest.d.ts +2 -1
  3. package/dist/helpers/manifest.js +75 -1
  4. package/dist/helpers/manifest.js.map +1 -1
  5. package/dist/helpers/modelNames.d.ts +7 -0
  6. package/dist/helpers/modelNames.js +232 -0
  7. package/dist/helpers/modelNames.js.map +1 -0
  8. package/dist/helpers/naming.d.ts +2 -1
  9. package/dist/helpers/naming.js +45 -1
  10. package/dist/helpers/naming.js.map +1 -1
  11. package/dist/sdkgen.d.ts +3 -2
  12. package/dist/sdkgen.js +12 -3
  13. package/dist/sdkgen.js.map +1 -1
  14. package/dist/testkit.d.ts +2 -0
  15. package/dist/testkit.js +80 -24
  16. package/dist/testkit.js.map +1 -1
  17. package/dist/tsconfig.tsbuildinfo +1 -1
  18. package/dist/utility.js +17 -7
  19. package/dist/utility.js.map +1 -1
  20. package/package.json +1 -1
  21. package/project/.sdk/model/feature/secrets.aon +1001 -0
  22. package/project/.sdk/model/target/c.aon +15 -2
  23. package/project/.sdk/model/target/clojure.aon +10 -0
  24. package/project/.sdk/model/target/cpp.aon +18 -0
  25. package/project/.sdk/model/target/csharp.aon +5 -0
  26. package/project/.sdk/model/target/elixir.aon +6 -0
  27. package/project/.sdk/model/target/java.aon +5 -0
  28. package/project/.sdk/model/target/js.aon +5 -0
  29. package/project/.sdk/model/target/kotlin.aon +7 -0
  30. package/project/.sdk/model/target/lua.aon +17 -0
  31. package/project/.sdk/model/target/ocaml.aon +48 -5
  32. package/project/.sdk/model/target/perl.aon +5 -0
  33. package/project/.sdk/model/target/php.aon +5 -0
  34. package/project/.sdk/model/target/rb.aon +5 -0
  35. package/project/.sdk/model/target/rust.aon +5 -0
  36. package/project/.sdk/model/target/scala.aon +38 -2
  37. package/project/.sdk/model/target/swift.aon +10 -0
  38. package/project/.sdk/model/target/zig.aon +30 -4
  39. package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
  40. package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
  41. package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
  42. package/project/.sdk/src/cmp/clojure/Config_clojure.ts +51 -4
  43. package/project/.sdk/src/cmp/clojure/Main_clojure.ts +43 -1
  44. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +17 -1
  45. package/project/.sdk/src/cmp/clojure/featureextra_clojure.ts +130 -0
  46. package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
  47. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
  48. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
  49. package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
  50. package/project/.sdk/src/cmp/csharp/Config_csharp.ts +70 -0
  51. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +9 -1
  52. package/project/.sdk/src/cmp/csharp/Package_csharp.ts +25 -1
  53. package/project/.sdk/src/cmp/elixir/Config_elixir.ts +68 -2
  54. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +16 -0
  55. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +14 -1
  56. package/project/.sdk/src/cmp/java/Config_java.ts +84 -2
  57. package/project/.sdk/src/cmp/java/Main_java.ts +10 -1
  58. package/project/.sdk/src/cmp/js/Config_js.ts +75 -8
  59. package/project/.sdk/src/cmp/js/Main_js.ts +66 -2
  60. package/project/.sdk/src/cmp/js/fragment/Config.data.fragment.js +18 -1
  61. package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +18 -1
  62. package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +7 -0
  63. package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +63 -1
  64. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +32 -2
  65. package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
  66. package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
  67. package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
  68. package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
  69. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
  70. package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
  71. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
  72. package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
  73. package/project/.sdk/src/cmp/perl/Config_perl.ts +129 -3
  74. package/project/.sdk/src/cmp/perl/Main_perl.ts +41 -1
  75. package/project/.sdk/src/cmp/perl/Package_perl.ts +13 -1
  76. package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +1 -0
  77. package/project/.sdk/src/cmp/php/Config_php.ts +105 -1
  78. package/project/.sdk/src/cmp/php/Gitignore_php.ts +4 -2
  79. package/project/.sdk/src/cmp/php/Main_php.ts +16 -1
  80. package/project/.sdk/src/cmp/rb/Config_rb.ts +92 -2
  81. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +11 -1
  82. package/project/.sdk/src/cmp/rb/Main_rb.ts +7 -1
  83. package/project/.sdk/src/cmp/rust/Main_rust.ts +99 -1
  84. package/project/.sdk/src/cmp/rust/Package_rust.ts +72 -6
  85. package/project/.sdk/src/cmp/scala/Config_scala.ts +44 -0
  86. package/project/.sdk/src/cmp/scala/Main_scala.ts +68 -1
  87. package/project/.sdk/src/cmp/swift/Config_swift.ts +62 -1
  88. package/project/.sdk/src/cmp/swift/Main_swift.ts +35 -1
  89. package/project/.sdk/src/cmp/swift/Package_swift.ts +81 -11
  90. package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +58 -44
  91. package/project/.sdk/src/cmp/swift/utility_swift.ts +22 -0
  92. package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
  93. package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
  94. package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
  95. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
  96. package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
  97. package/project/.sdk/tm/c/Makefile +58 -9
  98. package/project/.sdk/tm/c/core/sdk.h +10 -0
  99. package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
  100. package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
  101. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
  102. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
  103. package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
  104. package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
  105. package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
  106. package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
  107. package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
  108. package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
  109. package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
  110. package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
  111. package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
  112. package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
  113. package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
  114. package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
  115. package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
  116. package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
  117. package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
  118. package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
  119. package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
  120. package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
  121. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
  122. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
  123. package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
  124. package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
  125. package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
  126. package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
  127. package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
  128. package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
  129. package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
  130. package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
  131. package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
  132. package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
  133. package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
  134. package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
  135. package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
  136. package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
  137. package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
  138. package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
  139. package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
  140. package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
  141. package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
  142. package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
  143. package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
  144. package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
  145. package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
  146. package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
  147. package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
  148. package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
  149. package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
  150. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
  151. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
  152. package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
  153. package/project/.sdk/tm/c/feature/secrets.c +797 -0
  154. package/project/.sdk/tm/c/feature/secrets.h +46 -0
  155. package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
  156. package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
  157. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
  158. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
  159. package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
  160. package/project/.sdk/tm/clojure/Makefile +3 -0
  161. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +530 -0
  162. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +84 -0
  163. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +44 -0
  164. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +240 -0
  165. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +199 -0
  166. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +111 -0
  167. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +46 -0
  168. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +122 -0
  169. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +1018 -0
  170. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +106 -0
  171. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +157 -0
  172. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +77 -0
  173. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +92 -0
  174. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +46 -0
  175. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +177 -0
  176. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +90 -0
  177. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +40 -0
  178. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +111 -0
  179. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +297 -0
  180. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +192 -0
  181. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +261 -0
  182. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +165 -0
  183. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +111 -0
  184. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +107 -0
  185. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +61 -0
  186. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +88 -0
  187. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +115 -0
  188. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +214 -0
  189. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +80 -0
  190. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +93 -0
  191. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +63 -0
  192. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +99 -0
  193. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +142 -0
  194. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +25 -0
  195. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +196 -0
  196. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +113 -0
  197. package/project/.sdk/tm/clojure/src/sdk/core.clj +9 -0
  198. package/project/.sdk/tm/clojure/src/sdk/features.clj +13 -1
  199. package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +581 -0
  200. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +103 -14
  201. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
  202. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
  203. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
  204. package/project/.sdk/tm/cpp/Makefile +48 -4
  205. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
  206. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
  207. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
  208. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
  209. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
  210. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
  211. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
  212. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
  213. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
  214. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
  215. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
  216. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
  217. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
  218. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
  219. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
  220. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
  221. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
  222. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
  223. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
  224. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
  225. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
  226. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
  227. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
  228. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
  229. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
  230. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
  231. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
  232. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
  233. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
  234. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
  235. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
  236. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
  237. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
  238. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
  239. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
  240. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
  241. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
  242. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
  243. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
  244. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
  245. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
  246. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
  247. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
  248. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
  249. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
  250. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
  251. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
  252. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
  253. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
  254. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
  255. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
  256. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
  257. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
  258. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
  259. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
  260. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
  261. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
  262. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
  263. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
  264. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
  265. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
  266. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
  267. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
  268. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
  269. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
  270. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
  271. package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
  272. package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
  273. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
  274. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
  275. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
  276. package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +915 -0
  277. package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +196 -0
  278. package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +70 -0
  279. package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +505 -0
  280. package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +52 -0
  281. package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +285 -0
  282. package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +55 -0
  283. package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +228 -0
  284. package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +102 -0
  285. package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +256 -0
  286. package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +1379 -0
  287. package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +177 -0
  288. package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +326 -0
  289. package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +295 -0
  290. package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +113 -0
  291. package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +177 -0
  292. package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +198 -0
  293. package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +95 -0
  294. package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +351 -0
  295. package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +196 -0
  296. package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +325 -0
  297. package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +195 -0
  298. package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +192 -0
  299. package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +75 -0
  300. package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +112 -0
  301. package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +167 -0
  302. package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +221 -0
  303. package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +213 -0
  304. package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +155 -0
  305. package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +169 -0
  306. package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +172 -0
  307. package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +240 -0
  308. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +192 -0
  309. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +503 -0
  310. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +775 -0
  311. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +1787 -0
  312. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
  313. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
  314. package/project/.sdk/tm/csharp/utility/MakeOptions.cs +10 -0
  315. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
  316. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +118 -0
  317. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +56 -0
  318. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +320 -0
  319. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +205 -0
  320. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +166 -0
  321. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +13 -0
  322. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +73 -0
  323. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +185 -0
  324. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +1182 -0
  325. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +139 -0
  326. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +132 -0
  327. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +179 -0
  328. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +99 -0
  329. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +129 -0
  330. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +59 -0
  331. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +190 -0
  332. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +136 -0
  333. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +42 -0
  334. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +368 -0
  335. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +257 -0
  336. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +160 -0
  337. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +127 -0
  338. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +96 -0
  339. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +124 -0
  340. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +162 -0
  341. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +627 -0
  342. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +134 -0
  343. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +125 -0
  344. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +152 -0
  345. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +80 -0
  346. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +101 -0
  347. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +176 -0
  348. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +67 -0
  349. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +536 -0
  350. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +662 -0
  351. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +839 -0
  352. package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +1113 -0
  353. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
  354. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
  355. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
  356. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  357. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  358. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  359. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  360. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  361. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
  362. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  363. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
  364. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  365. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  366. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  367. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  368. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  369. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  370. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  371. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +2 -2
  372. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
  373. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
  374. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
  375. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
  376. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
  377. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +2 -2
  378. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +2 -2
  379. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +2 -2
  380. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
  381. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
  382. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
  383. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +2 -2
  384. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +2 -2
  385. package/project/.sdk/tm/go/feature/secrets_feature.go +48 -10
  386. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +239 -0
  387. package/project/.sdk/tm/go/test/omni/omni.go +2 -2
  388. package/project/.sdk/tm/go/test/omni/util.go +2 -2
  389. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
  390. package/project/.sdk/tm/java/feature/SecretsFeature.java +791 -0
  391. package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +181 -0
  392. package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +64 -0
  393. package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +433 -0
  394. package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +54 -0
  395. package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +292 -0
  396. package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +49 -0
  397. package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +204 -0
  398. package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +93 -0
  399. package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +244 -0
  400. package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +1196 -0
  401. package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +173 -0
  402. package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +339 -0
  403. package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +274 -0
  404. package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +94 -0
  405. package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +37 -0
  406. package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +172 -0
  407. package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +171 -0
  408. package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +89 -0
  409. package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +232 -0
  410. package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +198 -0
  411. package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +142 -0
  412. package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +229 -0
  413. package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +302 -0
  414. package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +21 -0
  415. package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +698 -0
  416. package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +100 -0
  417. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +294 -0
  418. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +164 -0
  419. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +161 -0
  420. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +103 -0
  421. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +143 -0
  422. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +186 -0
  423. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +192 -0
  424. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +139 -0
  425. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +143 -0
  426. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +80 -0
  427. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +138 -0
  428. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +243 -0
  429. package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +1050 -0
  430. package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
  431. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
  432. package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
  433. package/project/.sdk/tm/java/utility/MakeOptions.java +7 -0
  434. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  435. package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +454 -0
  436. package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +119 -0
  437. package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +42 -0
  438. package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +323 -0
  439. package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +196 -0
  440. package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +120 -0
  441. package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +48 -0
  442. package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +150 -0
  443. package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +949 -0
  444. package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +35 -0
  445. package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +165 -0
  446. package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +94 -0
  447. package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +106 -0
  448. package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +59 -0
  449. package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +79 -0
  450. package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +100 -0
  451. package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +574 -0
  452. package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +56 -0
  453. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +188 -0
  454. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +135 -0
  455. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +128 -0
  456. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +67 -0
  457. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +115 -0
  458. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +139 -0
  459. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +93 -0
  460. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +99 -0
  461. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +111 -0
  462. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +105 -0
  463. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +157 -0
  464. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +119 -0
  465. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +39 -0
  466. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +40 -0
  467. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +21 -0
  468. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +42 -0
  469. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +18 -0
  470. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +151 -0
  471. package/project/.sdk/tm/js/src/utility/StructUtility.js +1 -1
  472. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +1019 -0
  473. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  474. package/project/.sdk/tm/js/test/vendor/omni/runner.js +1 -1
  475. package/project/.sdk/tm/js/test/vendor/omni/util.js +1 -1
  476. package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +684 -0
  477. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +117 -0
  478. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +40 -0
  479. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +322 -0
  480. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +227 -0
  481. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +163 -0
  482. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +57 -0
  483. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +179 -0
  484. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +1131 -0
  485. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +241 -0
  486. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +180 -0
  487. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +64 -0
  488. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +124 -0
  489. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +125 -0
  490. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +66 -0
  491. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +171 -0
  492. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +132 -0
  493. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +359 -0
  494. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +21 -0
  495. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +308 -0
  496. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +525 -0
  497. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +126 -0
  498. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +205 -0
  499. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +251 -0
  500. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +145 -0
  501. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +130 -0
  502. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +77 -0
  503. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +119 -0
  504. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +156 -0
  505. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +219 -0
  506. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +114 -0
  507. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +114 -0
  508. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +118 -0
  509. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +220 -0
  510. package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +1217 -0
  511. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
  512. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
  513. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
  514. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  515. package/project/.sdk/tm/lua/Makefile +15 -4
  516. package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
  517. package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
  518. package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
  519. package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
  520. package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
  521. package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
  522. package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
  523. package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
  524. package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
  525. package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
  526. package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
  527. package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
  528. package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
  529. package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
  530. package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
  531. package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
  532. package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
  533. package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
  534. package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
  535. package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
  536. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
  537. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
  538. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
  539. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
  540. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
  541. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
  542. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
  543. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
  544. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
  545. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
  546. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
  547. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
  548. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
  549. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
  550. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
  551. package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
  552. package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
  553. package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
  554. package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
  555. package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
  556. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
  557. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
  558. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
  559. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
  560. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  561. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  562. package/project/.sdk/tm/ocaml/Makefile +52 -8
  563. package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
  564. package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
  565. package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
  566. package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
  567. package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
  568. package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
  569. package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
  570. package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
  571. package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
  572. package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
  573. package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
  574. package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
  575. package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
  576. package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
  577. package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
  578. package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
  579. package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
  580. package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
  581. package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
  582. package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
  583. package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
  584. package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
  585. package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
  586. package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
  587. package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
  588. package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
  589. package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
  590. package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
  591. package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
  592. package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
  593. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
  594. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
  595. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
  596. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
  597. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
  598. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
  599. package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
  600. package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
  601. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
  602. package/project/.sdk/tm/perl/Makefile +6 -1
  603. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +141 -0
  604. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +65 -0
  605. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +346 -0
  606. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +216 -0
  607. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +176 -0
  608. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +59 -0
  609. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +157 -0
  610. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +1139 -0
  611. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +187 -0
  612. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +100 -0
  613. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +119 -0
  614. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +71 -0
  615. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +251 -0
  616. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +122 -0
  617. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +70 -0
  618. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +263 -0
  619. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +159 -0
  620. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +180 -0
  621. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +92 -0
  622. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +138 -0
  623. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +213 -0
  624. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +173 -0
  625. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +132 -0
  626. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +132 -0
  627. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +102 -0
  628. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +132 -0
  629. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +190 -0
  630. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +124 -0
  631. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +301 -0
  632. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +605 -0
  633. package/project/.sdk/tm/perl/feature/secrets_feature.pm +696 -0
  634. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  635. package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +1004 -0
  636. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  637. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  638. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  639. package/project/.sdk/tm/php/feature/SecretsFeature.php +694 -0
  640. package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +226 -0
  641. package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +75 -0
  642. package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +444 -0
  643. package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +262 -0
  644. package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +202 -0
  645. package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +74 -0
  646. package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +195 -0
  647. package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +1514 -0
  648. package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +260 -0
  649. package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +129 -0
  650. package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +169 -0
  651. package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +79 -0
  652. package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +348 -0
  653. package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +163 -0
  654. package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +40 -0
  655. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +274 -0
  656. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +170 -0
  657. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +163 -0
  658. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +106 -0
  659. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +144 -0
  660. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +194 -0
  661. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +113 -0
  662. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +131 -0
  663. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +150 -0
  664. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +101 -0
  665. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +146 -0
  666. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +161 -0
  667. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +129 -0
  668. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +322 -0
  669. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +724 -0
  670. package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +1165 -0
  671. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
  672. package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
  673. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  674. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  675. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  676. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  677. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  678. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  679. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
  680. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  681. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
  682. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  683. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  684. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  685. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  686. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  687. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  688. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +2 -2
  689. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  690. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +1 -1
  691. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  692. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  693. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  694. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  695. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +1 -1
  696. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  697. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +1 -1
  698. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  699. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  700. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  701. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
  702. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +1 -1
  703. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
  704. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  705. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
  706. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  707. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +1 -1
  708. package/project/.sdk/tm/py/test/voxgig_omni/util.py +1 -1
  709. package/project/.sdk/tm/rb/Makefile +7 -1
  710. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +118 -0
  711. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +55 -0
  712. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +315 -0
  713. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +197 -0
  714. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +143 -0
  715. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +52 -0
  716. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +147 -0
  717. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +1079 -0
  718. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +169 -0
  719. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +93 -0
  720. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +112 -0
  721. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +56 -0
  722. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +99 -0
  723. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +106 -0
  724. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +24 -0
  725. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +111 -0
  726. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +200 -0
  727. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +130 -0
  728. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +121 -0
  729. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +66 -0
  730. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +107 -0
  731. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +137 -0
  732. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +136 -0
  733. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +97 -0
  734. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +104 -0
  735. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +113 -0
  736. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +127 -0
  737. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +210 -0
  738. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +465 -0
  739. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +30 -0
  740. package/project/.sdk/tm/rb/feature/secrets_feature.rb +583 -0
  741. package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +935 -0
  742. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
  743. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
  744. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
  745. package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +130 -0
  746. package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +114 -0
  747. package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +416 -0
  748. package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +245 -0
  749. package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +200 -0
  750. package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +90 -0
  751. package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +231 -0
  752. package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +1565 -0
  753. package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +18 -0
  754. package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +226 -0
  755. package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +137 -0
  756. package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +148 -0
  757. package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +83 -0
  758. package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +132 -0
  759. package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +433 -0
  760. package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +174 -0
  761. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +146 -0
  762. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +230 -0
  763. package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +328 -0
  764. package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +184 -0
  765. package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +172 -0
  766. package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +102 -0
  767. package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +153 -0
  768. package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +228 -0
  769. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +537 -0
  770. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +300 -0
  771. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +137 -0
  772. package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +148 -0
  773. package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +165 -0
  774. package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +150 -0
  775. package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +144 -0
  776. package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +51 -0
  777. package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +637 -0
  778. package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +677 -0
  779. package/project/.sdk/tm/rust/feature/secrets.rs +984 -0
  780. package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +1605 -0
  781. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
  782. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
  783. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
  784. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
  785. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
  786. package/project/.sdk/tm/scala/Makefile +8 -3
  787. package/project/.sdk/tm/scala/feature/SecretsFeature.scala +578 -0
  788. package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +96 -0
  789. package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +270 -0
  790. package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +216 -0
  791. package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +144 -0
  792. package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +59 -0
  793. package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +149 -0
  794. package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +1089 -0
  795. package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +156 -0
  796. package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +169 -0
  797. package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +47 -0
  798. package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +107 -0
  799. package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +131 -0
  800. package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +53 -0
  801. package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +110 -0
  802. package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +157 -0
  803. package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +136 -0
  804. package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +302 -0
  805. package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +20 -0
  806. package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +281 -0
  807. package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +473 -0
  808. package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +123 -0
  809. package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +216 -0
  810. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +225 -0
  811. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +124 -0
  812. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +104 -0
  813. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +68 -0
  814. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +97 -0
  815. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +131 -0
  816. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +209 -0
  817. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +98 -0
  818. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +90 -0
  819. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +95 -0
  820. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +214 -0
  821. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +1042 -0
  822. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
  823. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
  824. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
  825. package/project/.sdk/tm/scala/utility/Make.scala +7 -0
  826. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/SecretsFeature.swift +669 -0
  827. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +98 -0
  828. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +87 -0
  829. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +298 -0
  830. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +209 -0
  831. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +191 -0
  832. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +63 -0
  833. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +158 -0
  834. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +1141 -0
  835. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +192 -0
  836. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +183 -0
  837. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +130 -0
  838. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +141 -0
  839. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +59 -0
  840. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +125 -0
  841. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +198 -0
  842. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +139 -0
  843. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +271 -0
  844. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +173 -0
  845. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +139 -0
  846. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +198 -0
  847. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +86 -0
  848. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +129 -0
  849. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +175 -0
  850. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +310 -0
  851. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +140 -0
  852. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +118 -0
  853. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +105 -0
  854. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +111 -0
  855. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +297 -0
  856. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +120 -0
  857. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +452 -0
  858. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +25 -0
  859. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +689 -0
  860. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +755 -0
  861. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +9 -0
  862. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +30 -0
  863. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/feature/secrets/SecretsFeatureTest.swift +1030 -0
  864. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
  865. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
  866. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
  867. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
  868. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  869. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  870. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  871. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  872. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  873. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
  874. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  875. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  876. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
  877. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  878. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  879. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  880. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  881. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  882. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  883. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  884. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  885. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  886. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  887. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  888. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  889. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  890. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  891. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  892. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  893. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  894. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  895. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  896. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  897. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  898. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
  899. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  900. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  901. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  902. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  903. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
  904. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +1 -1
  905. package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
  906. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  907. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  908. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  909. package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
  910. package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
  911. package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
  912. package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
  913. package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
  914. package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
  915. package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
  916. package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
  917. package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
  918. package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
  919. package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
  920. package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
  921. package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
  922. package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
  923. package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
  924. package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
  925. package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
  926. package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
  927. package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
  928. package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
  929. package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
  930. package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
  931. package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
  932. package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
  933. package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
  934. package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
  935. package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
  936. package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
  937. package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
  938. package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
  939. package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
  940. package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
  941. package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
  942. package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
  943. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +2 -2
  944. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +2 -2
  945. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +2 -2
  946. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +2 -2
  947. package/project/sdkgen-package.json +1 -4
  948. package/src/helpers/manifest.ts +81 -1
  949. package/src/helpers/modelNames.ts +284 -0
  950. package/src/helpers/naming.ts +45 -1
  951. package/src/sdkgen.ts +11 -1
  952. package/src/testkit.ts +115 -26
  953. package/src/utility.ts +17 -7
  954. package/project/.sdk/model/target/dart.aon +0 -58
  955. package/project/.sdk/model/target/lean.aon +0 -91
  956. package/project/.sdk/model/target/seneca-provider.aon +0 -120
  957. package/project/.sdk/src/cmp/dart/Config_dart.ts +0 -176
  958. package/project/.sdk/src/cmp/dart/EntityBase_dart.ts +0 -34
  959. package/project/.sdk/src/cmp/dart/EntityOperation_dart.ts +0 -43
  960. package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +0 -207
  961. package/project/.sdk/src/cmp/dart/Entity_dart.ts +0 -87
  962. package/project/.sdk/src/cmp/dart/Gitignore_dart.ts +0 -34
  963. package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +0 -33
  964. package/project/.sdk/src/cmp/dart/Main_dart.ts +0 -106
  965. package/project/.sdk/src/cmp/dart/Package_dart.ts +0 -82
  966. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +0 -177
  967. package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +0 -238
  968. package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +0 -53
  969. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +0 -152
  970. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +0 -59
  971. package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +0 -65
  972. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +0 -151
  973. package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +0 -63
  974. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +0 -225
  975. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +0 -397
  976. package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +0 -24
  977. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +0 -106
  978. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +0 -78
  979. package/project/.sdk/src/cmp/dart/SdkError_dart.ts +0 -42
  980. package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +0 -516
  981. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +0 -628
  982. package/project/.sdk/src/cmp/dart/Test_dart.ts +0 -116
  983. package/project/.sdk/src/cmp/dart/fragment/Config.data.fragment.dart +0 -79
  984. package/project/.sdk/src/cmp/dart/fragment/Config.fragment.dart +0 -51
  985. package/project/.sdk/src/cmp/dart/fragment/Direct.test.fragment.dart +0 -25
  986. package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +0 -29
  987. package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +0 -28
  988. package/project/.sdk/src/cmp/dart/fragment/EntityBase.fragment.dart +0 -302
  989. package/project/.sdk/src/cmp/dart/fragment/EntityCreateOp.fragment.dart +0 -98
  990. package/project/.sdk/src/cmp/dart/fragment/EntityListOp.fragment.dart +0 -90
  991. package/project/.sdk/src/cmp/dart/fragment/EntityLoadOp.fragment.dart +0 -102
  992. package/project/.sdk/src/cmp/dart/fragment/EntityRemoveOp.fragment.dart +0 -108
  993. package/project/.sdk/src/cmp/dart/fragment/EntityUpdateOp.fragment.dart +0 -102
  994. package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +0 -338
  995. package/project/.sdk/src/cmp/dart/fragment/SdkError.fragment.dart +0 -26
  996. package/project/.sdk/src/cmp/dart/tsconfig.json +0 -15
  997. package/project/.sdk/src/cmp/dart/utility_dart.ts +0 -155
  998. package/project/.sdk/src/cmp/lean/Config_lean.ts +0 -93
  999. package/project/.sdk/src/cmp/lean/Entity_lean.ts +0 -9
  1000. package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +0 -18
  1001. package/project/.sdk/src/cmp/lean/Main_lean.ts +0 -120
  1002. package/project/.sdk/src/cmp/lean/Package_lean.ts +0 -93
  1003. package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +0 -29
  1004. package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +0 -19
  1005. package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +0 -25
  1006. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +0 -39
  1007. package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +0 -25
  1008. package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +0 -24
  1009. package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +0 -22
  1010. package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +0 -50
  1011. package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +0 -40
  1012. package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +0 -16
  1013. package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +0 -23
  1014. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +0 -19
  1015. package/project/.sdk/src/cmp/lean/Test_lean.ts +0 -261
  1016. package/project/.sdk/src/cmp/lean/utility_lean.ts +0 -129
  1017. package/project/.sdk/src/cmp/seneca-provider/Extras_seneca-provider.ts +0 -4080
  1018. package/project/.sdk/src/cmp/seneca-provider/Gitignore_seneca-provider.ts +0 -161
  1019. package/project/.sdk/src/cmp/seneca-provider/Main_seneca-provider.ts +0 -1011
  1020. package/project/.sdk/tm/dart/LICENSE +0 -22
  1021. package/project/.sdk/tm/dart/Makefile +0 -50
  1022. package/project/.sdk/tm/dart/lib/Context.dart +0 -150
  1023. package/project/.sdk/tm/dart/lib/Control.dart +0 -15
  1024. package/project/.sdk/tm/dart/lib/Operation.dart +0 -31
  1025. package/project/.sdk/tm/dart/lib/Point.dart +0 -51
  1026. package/project/.sdk/tm/dart/lib/Response.dart +0 -32
  1027. package/project/.sdk/tm/dart/lib/Result.dart +0 -39
  1028. package/project/.sdk/tm/dart/lib/Spec.dart +0 -49
  1029. package/project/.sdk/tm/dart/lib/feature/audit/AuditFeature.dart +0 -103
  1030. package/project/.sdk/tm/dart/lib/feature/base/BaseFeature.dart +0 -76
  1031. package/project/.sdk/tm/dart/lib/feature/cache/CacheFeature.dart +0 -152
  1032. package/project/.sdk/tm/dart/lib/feature/clienttrack/ClienttrackFeature.dart +0 -104
  1033. package/project/.sdk/tm/dart/lib/feature/cost/CostFeature.dart +0 -446
  1034. package/project/.sdk/tm/dart/lib/feature/debug/DebugFeature.dart +0 -153
  1035. package/project/.sdk/tm/dart/lib/feature/idempotency/IdempotencyFeature.dart +0 -92
  1036. package/project/.sdk/tm/dart/lib/feature/log/LogFeature.dart +0 -85
  1037. package/project/.sdk/tm/dart/lib/feature/metrics/MetricsFeature.dart +0 -103
  1038. package/project/.sdk/tm/dart/lib/feature/netsim/NetsimFeature.dart +0 -186
  1039. package/project/.sdk/tm/dart/lib/feature/paging/PagingFeature.dart +0 -240
  1040. package/project/.sdk/tm/dart/lib/feature/proxy/ProxyFeature.dart +0 -118
  1041. package/project/.sdk/tm/dart/lib/feature/ratelimit/RatelimitFeature.dart +0 -103
  1042. package/project/.sdk/tm/dart/lib/feature/rbac/RbacFeature.dart +0 -121
  1043. package/project/.sdk/tm/dart/lib/feature/retry/RetryFeature.dart +0 -155
  1044. package/project/.sdk/tm/dart/lib/feature/streaming/StreamingFeature.dart +0 -97
  1045. package/project/.sdk/tm/dart/lib/feature/telemetry/TelemetryFeature.dart +0 -136
  1046. package/project/.sdk/tm/dart/lib/feature/test/TestFeature.dart +0 -328
  1047. package/project/.sdk/tm/dart/lib/feature/timeout/TimeoutFeature.dart +0 -104
  1048. package/project/.sdk/tm/dart/lib/utility/CleanUtility.dart +0 -12
  1049. package/project/.sdk/tm/dart/lib/utility/DoneUtility.dart +0 -18
  1050. package/project/.sdk/tm/dart/lib/utility/ErrUtility.dart +0 -46
  1051. package/project/.sdk/tm/dart/lib/utility/FeatureAddUtility.dart +0 -35
  1052. package/project/.sdk/tm/dart/lib/utility/FeatureHookUtility.dart +0 -20
  1053. package/project/.sdk/tm/dart/lib/utility/FeatureInitUtility.dart +0 -9
  1054. package/project/.sdk/tm/dart/lib/utility/FetcherUtility.dart +0 -104
  1055. package/project/.sdk/tm/dart/lib/utility/GraphqlUtility.dart +0 -162
  1056. package/project/.sdk/tm/dart/lib/utility/MakeContextUtility.dart +0 -6
  1057. package/project/.sdk/tm/dart/lib/utility/MakeErrorUtility.dart +0 -71
  1058. package/project/.sdk/tm/dart/lib/utility/MakeFetchDefUtility.dart +0 -42
  1059. package/project/.sdk/tm/dart/lib/utility/MakeOptionsUtility.dart +0 -233
  1060. package/project/.sdk/tm/dart/lib/utility/MakePointUtility.dart +0 -130
  1061. package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +0 -66
  1062. package/project/.sdk/tm/dart/lib/utility/MakeResponseUtility.dart +0 -59
  1063. package/project/.sdk/tm/dart/lib/utility/MakeResultUtility.dart +0 -49
  1064. package/project/.sdk/tm/dart/lib/utility/MakeSpecUtility.dart +0 -77
  1065. package/project/.sdk/tm/dart/lib/utility/MakeUrlUtility.dart +0 -51
  1066. package/project/.sdk/tm/dart/lib/utility/ParamUtility.dart +0 -56
  1067. package/project/.sdk/tm/dart/lib/utility/PrepareAuthUtility.dart +0 -46
  1068. package/project/.sdk/tm/dart/lib/utility/PrepareBodyUtility.dart +0 -19
  1069. package/project/.sdk/tm/dart/lib/utility/PrepareHeadersUtility.dart +0 -11
  1070. package/project/.sdk/tm/dart/lib/utility/PrepareMethodUtility.dart +0 -30
  1071. package/project/.sdk/tm/dart/lib/utility/PrepareParamsUtility.dart +0 -23
  1072. package/project/.sdk/tm/dart/lib/utility/PreparePathUtility.dart +0 -9
  1073. package/project/.sdk/tm/dart/lib/utility/PrepareQueryUtility.dart +0 -18
  1074. package/project/.sdk/tm/dart/lib/utility/ResultBasicUtility.dart +0 -29
  1075. package/project/.sdk/tm/dart/lib/utility/ResultBodyUtility.dart +0 -15
  1076. package/project/.sdk/tm/dart/lib/utility/ResultHeadersUtility.dart +0 -18
  1077. package/project/.sdk/tm/dart/lib/utility/StructUtility.dart +0 -127
  1078. package/project/.sdk/tm/dart/lib/utility/TransformRequestUtility.dart +0 -28
  1079. package/project/.sdk/tm/dart/lib/utility/TransformResponseUtility.dart +0 -44
  1080. package/project/.sdk/tm/dart/lib/utility/Utility.dart +0 -239
  1081. package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +0 -2462
  1082. package/project/.sdk/tm/dart/src/feature/README.md +0 -3
  1083. package/project/.sdk/tm/dart/src/feature/telemetry/.gitkeep +0 -0
  1084. package/project/.sdk/tm/dart/src/feature/test/.gitkeep +0 -0
  1085. package/project/.sdk/tm/dart/src/feature/timeout/.gitkeep +0 -0
  1086. package/project/.sdk/tm/dart/test/custom_test.dart +0 -65
  1087. package/project/.sdk/tm/dart/test/exists_test.dart +0 -12
  1088. package/project/.sdk/tm/dart/test/feature/harness.dart +0 -329
  1089. package/project/.sdk/tm/dart/test/feature_test.dart +0 -1193
  1090. package/project/.sdk/tm/dart/test/harness.dart +0 -153
  1091. package/project/.sdk/tm/dart/test/netsim_test.dart +0 -48
  1092. package/project/.sdk/tm/dart/test/omni.dart +0 -520
  1093. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +0 -143
  1094. package/project/.sdk/tm/dart/test/pipeline_test.dart +0 -608
  1095. package/project/.sdk/tm/dart/test/primary_test.dart +0 -476
  1096. package/project/.sdk/tm/dart/test/sdk-test-control.json +0 -19
  1097. package/project/.sdk/tm/dart/test/struct_test.dart +0 -468
  1098. package/project/.sdk/tm/dart/test/utility.dart +0 -198
  1099. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +0 -7
  1100. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +0 -653
  1101. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +0 -232
  1102. package/project/.sdk/tm/lean/LICENSE +0 -21
  1103. package/project/.sdk/tm/lean/Makefile +0 -32
  1104. package/project/.sdk/tm/lean/VERSION +0 -1
  1105. package/project/.sdk/tm/lean/src/SdkFeature.lean +0 -171
  1106. package/project/.sdk/tm/lean/src/SdkFeatures.lean +0 -787
  1107. package/project/.sdk/tm/lean/src/SdkJson.lean +0 -134
  1108. package/project/.sdk/tm/lean/src/SdkRuntime.lean +0 -374
  1109. package/project/.sdk/tm/lean/src/SdkUtility.lean +0 -809
  1110. package/project/.sdk/tm/lean/src/VoxgigStruct.lean +0 -2880
  1111. package/project/.sdk/tm/lean/src/Vregex.lean +0 -412
  1112. package/project/.sdk/tm/lean/src/feature/README.md +0 -5
  1113. package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
  1114. package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
  1115. package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
  1116. package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
  1117. package/project/.sdk/tm/lean/src/feature/cost/.gitkeep +0 -0
  1118. package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
  1119. package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
  1120. package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
  1121. package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
  1122. package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
  1123. package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
  1124. package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
  1125. package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
  1126. package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
  1127. package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
  1128. package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
  1129. package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
  1130. package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
  1131. package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
  1132. package/project/.sdk/tm/lean/test/OmniResolver.lean +0 -358
  1133. package/project/.sdk/tm/lean/test/OmniSmoke.lean +0 -174
  1134. package/project/.sdk/tm/lean/test/StructCorpus.lean +0 -368
  1135. package/project/.sdk/tm/lean/test/TFeature.lean +0 -281
  1136. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +0 -227
  1137. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +0 -997
  1138. package/project/.sdk/tm/seneca-provider/CODE_OF_CONDUCT.md +0 -132
  1139. package/project/.sdk/tm/seneca-provider/LICENSE +0 -21
  1140. package/project/.sdk/tm/seneca-provider/Makefile +0 -15
  1141. package/project/.sdk/tm/seneca-provider/src/tsconfig.json +0 -18
  1142. package/project/.sdk/tm/seneca-provider/test/tsconfig.json +0 -16
  1143. package/project/.sdk/tm/seneca-provider/tsfmt.json +0 -3
  1144. /package/project/.sdk/tm/{dart/src/feature/audit → c/src/feature/secrets}/.gitkeep +0 -0
  1145. /package/project/.sdk/tm/{dart/src/feature/base → clojure/src/feature/secrets}/.gitkeep +0 -0
  1146. /package/project/.sdk/tm/{dart/src/feature/cache → cpp/src/feature/secrets}/.gitkeep +0 -0
  1147. /package/project/.sdk/tm/{dart/src/feature/clienttrack → csharp/src/feature/secrets}/.gitkeep +0 -0
  1148. /package/project/.sdk/tm/{dart/src/feature/cost → elixir/src/feature/secrets}/.gitkeep +0 -0
  1149. /package/project/.sdk/tm/{dart/src/feature/debug → java/src/feature/secrets}/.gitkeep +0 -0
  1150. /package/project/.sdk/tm/{dart/src/feature/idempotency → kotlin/src/feature/secrets}/.gitkeep +0 -0
  1151. /package/project/.sdk/tm/{dart/src/feature/log → lua/src/feature/secrets}/.gitkeep +0 -0
  1152. /package/project/.sdk/tm/{dart/src/feature/metrics → ocaml/src/feature/secrets}/.gitkeep +0 -0
  1153. /package/project/.sdk/tm/{dart/src/feature/netsim → perl/src/feature/secrets}/.gitkeep +0 -0
  1154. /package/project/.sdk/tm/{dart/src/feature/paging → php/src/feature/secrets}/.gitkeep +0 -0
  1155. /package/project/.sdk/tm/{dart/src/feature/proxy → rb/src/feature/secrets}/.gitkeep +0 -0
  1156. /package/project/.sdk/tm/{dart/src/feature/ratelimit → rust/src/feature/secrets}/.gitkeep +0 -0
  1157. /package/project/.sdk/tm/{dart/src/feature/rbac → scala/src/feature/secrets}/.gitkeep +0 -0
  1158. /package/project/.sdk/tm/{dart/src/feature/retry → swift/src/feature/secrets}/.gitkeep +0 -0
  1159. /package/project/.sdk/tm/{dart/src/feature/streaming → zig/src/feature/secrets}/.gitkeep +0 -0
@@ -0,0 +1,1605 @@
1
+ // Behavioural tests for the secrets feature (vendored @voxgig/sekreto).
2
+ //
3
+ // The contract under test: the `apikey` OPTION keeps its exact old meaning
4
+ // and always wins, because the feature places it FIRST in the provider
5
+ // chain (a `memory` store named `options`) - explicit-beats-lookup falls
6
+ // out of sekreto's first-hit rule rather than from special-case logic. With
7
+ // the feature inactive nothing changes at all. With it active and the
8
+ // option unset, the chain supplies the credential instead.
9
+ //
10
+ // EVERY CLIENT HERE IS LIVE, and the thing counted is `system.fetch` - the
11
+ // real transport the whole fetcher chain ends at. That is deliberate, and
12
+ // it is the mistake this file exists to avoid: under `test_sdk` the test
13
+ // feature REPLACES the transport with its own in-memory mock, so a counter
14
+ // hung off `system.fetch` is never reached, and "no request was sent" would
15
+ // hold for a healthy SDK carrying no secrets feature at all. An assertion
16
+ // that cannot fail pins no rule. So each fail-closed case proves its own
17
+ // counter FIRST, with the same construction and a WORKING provider: one
18
+ // request must reach `system.fetch` carrying the resolved credential. Only
19
+ // then does a zero from the broken provider mean REFUSED rather than
20
+ // UNWIRED. And the refusal is matched on the PROVIDER'S OWN message, so an
21
+ // unrelated failure cannot stand in for fail-closed.
22
+ //
23
+ // This file lives in the `feature/` container on purpose: `target add`
24
+ // trims it, along with the feature source and the vendored library, for a
25
+ // project whose model does not select `secrets`.
26
+
27
+ use std::cell::RefCell;
28
+ use std::rc::Rc;
29
+
30
+ use RUSTCRATE::core::context::CtxSpec;
31
+ use RUSTCRATE::core::helpers::{
32
+ call_vfn, get_str, getp, getpath, ja, jo, json_thunk, to_int, vfn,
33
+ };
34
+ use RUSTCRATE::core::spec::Spec;
35
+ use RUSTCRATE::{ProjectNameSDK, Value};
36
+
37
+ const BASE: &str = "http://secrets.test/api";
38
+
39
+ // ---- the counted transport ---------------------------------------------
40
+
41
+ /// One recorded request, SNAPSHOT at the moment it was handed to the
42
+ /// transport.
43
+ ///
44
+ /// A snapshot, not the fetchdef itself, and that is load-bearing: the
45
+ /// fetchdef's `headers` map is an Rc the retry path rewrites IN PLACE, so
46
+ /// a recorder that kept the live map would report every earlier call as
47
+ /// carrying the LAST token - and "the retry carried a new credential"
48
+ /// would pass whether or not it did.
49
+ #[derive(Clone)]
50
+ struct Call {
51
+ url: String,
52
+ auth: Option<String>,
53
+ body: Option<String>,
54
+ }
55
+
56
+ /// A `system.fetch` that records every call it is handed, so "sent" is a
57
+ /// fact about the wire rather than about a mock somewhere up the chain.
58
+ #[derive(Clone)]
59
+ struct Wire {
60
+ calls: Rc<RefCell<Vec<Call>>>,
61
+ /// One status per API call, the last repeating - so a case can say
62
+ /// "401 then 200" without counting calls itself.
63
+ apistatus: Rc<Vec<i64>>,
64
+ /// The access tokens the token endpoint issues, in order.
65
+ tokens: Rc<Vec<String>>,
66
+ /// The token endpoint path, relative to base.
67
+ tokenpath: String,
68
+ /// The JSON field the token endpoint answers in.
69
+ tokenfield: String,
70
+ /// Statuses for the token endpoint itself (the last repeating).
71
+ tokenstatus: Rc<Vec<i64>>,
72
+ issued: Rc<RefCell<usize>>,
73
+ apicalls: Rc<RefCell<usize>>,
74
+ }
75
+
76
+ impl Wire {
77
+ fn new() -> Wire {
78
+ Wire {
79
+ calls: Rc::new(RefCell::new(Vec::new())),
80
+ apistatus: Rc::new(vec![200]),
81
+ tokens: Rc::new(vec![
82
+ "ACCESS01".to_string(),
83
+ "ACCESS02".to_string(),
84
+ "ACCESS03".to_string(),
85
+ ]),
86
+ tokenpath: "auth/token".to_string(),
87
+ tokenfield: "access_token".to_string(),
88
+ tokenstatus: Rc::new(vec![200]),
89
+ issued: Rc::new(RefCell::new(0)),
90
+ apicalls: Rc::new(RefCell::new(0)),
91
+ }
92
+ }
93
+
94
+ fn apistatus(mut self, statuses: &[i64]) -> Wire {
95
+ self.apistatus = Rc::new(statuses.to_vec());
96
+ self
97
+ }
98
+
99
+ fn tokenstatus(mut self, statuses: &[i64]) -> Wire {
100
+ self.tokenstatus = Rc::new(statuses.to_vec());
101
+ self
102
+ }
103
+
104
+ fn tokenpath(mut self, path: &str, field: &str) -> Wire {
105
+ self.tokenpath = path.to_string();
106
+ self.tokenfield = field.to_string();
107
+ self
108
+ }
109
+
110
+ fn istoken(&self, url: &str) -> bool {
111
+ url.ends_with(&format!("/{}", self.tokenpath))
112
+ }
113
+
114
+ /// The Value::Func that goes into `system.fetch`.
115
+ fn fetch(&self) -> Value {
116
+ let w = self.clone();
117
+ vfn(move |arg| {
118
+ let url = match getp(arg, "0") {
119
+ Value::Str(s) => s,
120
+ _ => String::new(),
121
+ };
122
+ let fetchdef = getp(arg, "1");
123
+ w.calls.borrow_mut().push(Call {
124
+ url: url.clone(),
125
+ auth: authof(&fetchdef),
126
+ body: get_str(&fetchdef, "body"),
127
+ });
128
+
129
+ if w.istoken(&url) {
130
+ let n = *w.issued.borrow();
131
+ *w.issued.borrow_mut() = n + 1;
132
+ let status = pick(&w.tokenstatus, n);
133
+ let body = if (200..300).contains(&status) {
134
+ jo(vec![(
135
+ w.tokenfield.as_str(),
136
+ Value::str(pickstr(&w.tokens, n)),
137
+ )])
138
+ } else {
139
+ jo(vec![("error", Value::str("nope"))])
140
+ };
141
+ return response(status, body);
142
+ }
143
+
144
+ let n = *w.apicalls.borrow();
145
+ *w.apicalls.borrow_mut() = n + 1;
146
+ let status = pick(&w.apistatus, n);
147
+ response(status, jo(vec![("ok", Value::Bool(status < 400))]))
148
+ })
149
+ }
150
+
151
+ fn api(&self) -> Vec<Call> {
152
+ self.calls
153
+ .borrow()
154
+ .iter()
155
+ .filter(|c| !self.istoken(&c.url))
156
+ .cloned()
157
+ .collect()
158
+ }
159
+
160
+ fn token(&self) -> Vec<Call> {
161
+ self.calls
162
+ .borrow()
163
+ .iter()
164
+ .filter(|c| self.istoken(&c.url))
165
+ .cloned()
166
+ .collect()
167
+ }
168
+
169
+ fn sent(&self) -> usize {
170
+ self.calls.borrow().len()
171
+ }
172
+
173
+ /// What went out, for a failure message that names the leak rather
174
+ /// than just its count.
175
+ fn trace(&self) -> String {
176
+ self.calls
177
+ .borrow()
178
+ .iter()
179
+ .map(|c| format!("{} auth={:?}", c.url, c.auth))
180
+ .collect::<Vec<String>>()
181
+ .join(", ")
182
+ }
183
+ }
184
+
185
+ fn pick(list: &Rc<Vec<i64>>, n: usize) -> i64 {
186
+ list[n.min(list.len() - 1)]
187
+ }
188
+
189
+ fn pickstr(list: &Rc<Vec<String>>, n: usize) -> String {
190
+ list[n.min(list.len() - 1)].clone()
191
+ }
192
+
193
+ fn response(status: i64, body: Value) -> Value {
194
+ jo(vec![
195
+ ("status", Value::Num(status as f64)),
196
+ ("headers", Value::empty_map()),
197
+ ("json", json_thunk(body)),
198
+ ])
199
+ }
200
+
201
+ fn authof(fetchdef: &Value) -> Option<String> {
202
+ match getpath(&["headers", "authorization"], fetchdef) {
203
+ Value::Str(s) => Some(s),
204
+ _ => None,
205
+ }
206
+ }
207
+
208
+ // The Authorization header carries the SPEC's credential prefix, which a
209
+ // TEMPLATE cannot know: an OpenAPI `http`/`bearer` scheme gives
210
+ // `Bearer <token>`, an apiKey scheme the raw token. So assert on the
211
+ // CREDENTIAL and let the prefix be whatever this SDK's API declares -
212
+ // pinning the whole header value passes only for a prefix-less API, and
213
+ // this file ships to every project that selects the feature.
214
+ fn credential_is(header: Option<String>, token: &str) {
215
+ let got = header.unwrap_or_default();
216
+ assert!(
217
+ got == token || got.ends_with(&format!(" {}", token)),
218
+ "expected the Authorization header to carry {}, got: {:?}",
219
+ token,
220
+ got
221
+ );
222
+ }
223
+
224
+ fn call_auth(calls: &[Call], i: usize) -> Option<String> {
225
+ calls.get(i).and_then(|c| c.auth.clone())
226
+ }
227
+
228
+ // ---- clients ------------------------------------------------------------
229
+
230
+ // `allow.op` is named explicitly: a project that narrows the default set
231
+ // would otherwise turn the raw-path cases into a false RED (the control leg
232
+ // refused before it reached the transport), and the rule under test lives
233
+ // at the transport, downstream of the allow gate either way.
234
+ //
235
+ // `base` is named explicitly too: a LIVE client whose model has a templated
236
+ // base URL panics on a missing server variable at construction, and this
237
+ // file ships to every project.
238
+ fn sdk(wire: &Wire, secrets: Vec<(&str, Value)>) -> Rc<ProjectNameSDK> {
239
+ let fopts = jo(vec![("active", Value::Bool(true))]);
240
+ for (k, v) in secrets {
241
+ RUSTCRATE::core::helpers::setp(&fopts, k, v);
242
+ }
243
+
244
+ ProjectNameSDK::new(jo(vec![
245
+ ("base", Value::str(BASE)),
246
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
247
+ ("system", jo(vec![("fetch", wire.fetch())])),
248
+ ("feature", jo(vec![("secrets", fopts)])),
249
+ ]))
250
+ }
251
+
252
+ fn providers(list: Vec<Value>) -> (&'static str, Value) {
253
+ ("providers", Value::list(list))
254
+ }
255
+
256
+ /// A `memory` provider spec: the chain, with no process-wide state, so
257
+ /// tests running in parallel cannot see each other's credentials.
258
+ fn memory(key: &str, value: &str) -> Value {
259
+ jo(vec![
260
+ ("kind", Value::str("memory")),
261
+ ("values", jo(vec![(key, Value::str(value))])),
262
+ ])
263
+ }
264
+
265
+ /// A provider written as a plain callable - the Value-shaped half of the
266
+ /// custom-provider seam.
267
+ fn callable<F>(f: F) -> Value
268
+ where
269
+ F: Fn(&str) -> Value + 'static,
270
+ {
271
+ vfn(move |arg| match arg {
272
+ Value::Str(name) => f(name),
273
+ _ => Value::Noval,
274
+ })
275
+ }
276
+
277
+ fn working() -> Value {
278
+ callable(|name| {
279
+ if "apikey" == name {
280
+ Value::str("RAWKEY01")
281
+ } else {
282
+ Value::Noval
283
+ }
284
+ })
285
+ }
286
+
287
+ const BROKEN_MSG: &str = "vault unreachable";
288
+
289
+ fn broken() -> Value {
290
+ callable(|_name| jo(vec![("__err__", Value::str(BROKEN_MSG))]))
291
+ }
292
+
293
+ /// The feature's public accessor, published on the client's shared map.
294
+ fn secrets_call(client: &Rc<ProjectNameSDK>, args: Vec<Value>) -> Value {
295
+ let shared = client.get_root_ctx().shared.borrow().clone();
296
+ let f = getp(&shared, "secrets");
297
+ assert!(
298
+ matches!(f, Value::Func(_)),
299
+ "the secrets accessor is not published: the feature never initialised"
300
+ );
301
+ call_vfn(&f, &Value::list(args))
302
+ }
303
+
304
+ // ---- the ENTITY path ----------------------------------------------------
305
+
306
+ /// One request through the REAL entity-request utility, on the client's own
307
+ /// utility - the one the feature wrapped.
308
+ ///
309
+ /// `direct()` and `graphql()` are the raw paths and are exercised as
310
+ /// themselves below; this is the OTHER half, and it cannot be reached by
311
+ /// naming an entity because this file is a TEMPLATE and no project's entity
312
+ /// names are known here. `make_request` is the utility every generated
313
+ /// entity op ends at, so driving it directly exercises the same seam with
314
+ /// the same wiring.
315
+ fn entity_request(client: &Rc<ProjectNameSDK>, path: &str) -> Option<String> {
316
+ let rootctx = client.get_root_ctx();
317
+ let utility = rootctx.util();
318
+
319
+ let ctx = utility.make_context(
320
+ CtxSpec {
321
+ opname: Some("list".to_string()),
322
+ ..Default::default()
323
+ },
324
+ Some(&rootctx),
325
+ );
326
+
327
+ let spec = Rc::new(RefCell::new(Spec::new(&jo(vec![
328
+ ("base", Value::str(BASE)),
329
+ ("path", Value::str(path)),
330
+ ("method", Value::str("GET")),
331
+ ("headers", Value::empty_map()),
332
+ ("step", Value::str("start")),
333
+ ]))));
334
+ *ctx.spec.borrow_mut() = Some(spec);
335
+
336
+ utility.feature_hook(&ctx, "PreSpec");
337
+ utility.prepare_auth(&ctx).expect("prepare_auth");
338
+
339
+ match utility.make_request(&ctx) {
340
+ Ok(response) => response.borrow().err.as_ref().map(|e| e.msg.clone()),
341
+ Err(err) => Some(err.msg),
342
+ }
343
+ }
344
+
345
+ // ---- the chain ----------------------------------------------------------
346
+
347
+ #[test]
348
+ fn inactive_leaves_the_apikey_option_exactly_as_it_was() {
349
+ let wire = Wire::new();
350
+
351
+ // Not `sdk()`: the point is a client with the feature OFF.
352
+ let client = ProjectNameSDK::new(jo(vec![
353
+ ("base", Value::str(BASE)),
354
+ ("apikey", Value::str("OPTKEY01")),
355
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
356
+ ("system", jo(vec![("fetch", wire.fetch())])),
357
+ (
358
+ "feature",
359
+ jo(vec![(
360
+ "secrets",
361
+ jo(vec![
362
+ ("active", Value::Bool(false)),
363
+ providers(vec![memory("APIKEY", "CHAINKEY01")]),
364
+ ]),
365
+ )]),
366
+ ),
367
+ ]));
368
+
369
+ client
370
+ .direct(jo(vec![("path", Value::str("/thing"))]))
371
+ .expect("direct");
372
+
373
+ assert_eq!(wire.sent(), 1);
374
+ credential_is(call_auth(&wire.api(), 0), "OPTKEY01");
375
+
376
+ // No feature, no accessor.
377
+ let shared = client.get_root_ctx().shared.borrow().clone();
378
+ assert!(
379
+ !matches!(getp(&shared, "secrets"), Value::Func(_)),
380
+ "an inactive feature must publish nothing"
381
+ );
382
+ }
383
+
384
+ #[test]
385
+ fn apikey_option_still_wins_over_the_chain() {
386
+ let wire = Wire::new();
387
+
388
+ // The explicit credential is a CLIENT option, not a feature option -
389
+ // that is the whole point: `apikey` keeps its old meaning and the
390
+ // feature seats it first in the chain.
391
+ let client = ProjectNameSDK::new(jo(vec![
392
+ ("base", Value::str(BASE)),
393
+ ("apikey", Value::str("OPTKEY01")),
394
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
395
+ ("system", jo(vec![("fetch", wire.fetch())])),
396
+ (
397
+ "feature",
398
+ jo(vec![(
399
+ "secrets",
400
+ jo(vec![
401
+ ("active", Value::Bool(true)),
402
+ providers(vec![memory("APIKEY", "CHAINKEY01")]),
403
+ ]),
404
+ )]),
405
+ ),
406
+ ]));
407
+
408
+ client
409
+ .direct(jo(vec![("path", Value::str("/thing"))]))
410
+ .expect("direct");
411
+
412
+ credential_is(call_auth(&wire.api(), 0), "OPTKEY01");
413
+
414
+ // The explicit option is a real store, not a special case: a directed
415
+ // read names it like any other.
416
+ let got = secrets_call(
417
+ &client,
418
+ vec![
419
+ Value::str("getfrom"),
420
+ Value::str("options"),
421
+ Value::str("apikey"),
422
+ ],
423
+ );
424
+ assert_eq!(
425
+ got,
426
+ Value::str("OPTKEY01"),
427
+ "the explicit apikey is not seated as the `options` memory store"
428
+ );
429
+ }
430
+
431
+ #[test]
432
+ fn an_omitted_apikey_defers_to_the_chain() {
433
+ let wire = Wire::new();
434
+ let client = sdk(&wire, vec![providers(vec![memory("APIKEY", "CHAINKEY01")])]);
435
+
436
+ client
437
+ .direct(jo(vec![("path", Value::str("/thing"))]))
438
+ .expect("direct");
439
+
440
+ credential_is(call_auth(&wire.api(), 0), "CHAINKEY01");
441
+
442
+ // The options map is FROZEN: the credential lives in feature state, and
443
+ // a feature that wrote the shared options would be visible everywhere.
444
+ assert_eq!(
445
+ getp(&client.options_map(), "apikey"),
446
+ Value::str(""),
447
+ "the feature must not write the shared options map"
448
+ );
449
+ assert_eq!(
450
+ secrets_call(&client, vec![Value::str("credential")]),
451
+ Value::str("CHAINKEY01")
452
+ );
453
+ }
454
+
455
+ #[test]
456
+ fn an_explicitly_empty_apikey_also_defers_to_the_chain() {
457
+ let wire = Wire::new();
458
+ let client = ProjectNameSDK::new(jo(vec![
459
+ ("base", Value::str(BASE)),
460
+ ("apikey", Value::str("")),
461
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
462
+ ("system", jo(vec![("fetch", wire.fetch())])),
463
+ (
464
+ "feature",
465
+ jo(vec![(
466
+ "secrets",
467
+ jo(vec![
468
+ ("active", Value::Bool(true)),
469
+ providers(vec![memory("APIKEY", "CHAINKEY01")]),
470
+ ]),
471
+ )]),
472
+ ),
473
+ ]));
474
+
475
+ client
476
+ .direct(jo(vec![("path", Value::str("/thing"))]))
477
+ .expect("direct");
478
+
479
+ credential_is(call_auth(&wire.api(), 0), "CHAINKEY01");
480
+ }
481
+
482
+ // `auth: null` - the documented way to disable auth outright, which
483
+ // prepare_auth honours before it ever reads the apikey, and which the
484
+ // transport injection must honour too.
485
+ #[test]
486
+ fn auth_null_suppresses_the_credential_chain_or_no_chain() {
487
+ let wire = Wire::new();
488
+ let client = ProjectNameSDK::new(jo(vec![
489
+ ("base", Value::str(BASE)),
490
+ ("auth", Value::Null),
491
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
492
+ ("system", jo(vec![("fetch", wire.fetch())])),
493
+ (
494
+ "feature",
495
+ jo(vec![(
496
+ "secrets",
497
+ jo(vec![
498
+ ("active", Value::Bool(true)),
499
+ providers(vec![memory("APIKEY", "CHAINKEY01")]),
500
+ ]),
501
+ )]),
502
+ ),
503
+ ]));
504
+
505
+ client
506
+ .direct(jo(vec![("path", Value::str("/thing"))]))
507
+ .expect("direct");
508
+
509
+ assert_eq!(wire.sent(), 1, "the request must still go out");
510
+ assert_eq!(
511
+ call_auth(&wire.api(), 0),
512
+ None,
513
+ "nothing may be sent when auth is suppressed, but the wire carried: {}",
514
+ wire.trace()
515
+ );
516
+
517
+ // The suppression survives option validation rather than being replaced
518
+ // by the optspec's default auth map.
519
+ //
520
+ // Read from the RAW map: `getp` applies the Group A rule and answers
521
+ // the alt for a stored null, so it cannot tell an absent auth from a
522
+ // suppressed one - and only the latter is a suppression.
523
+ let opts = client.options_map();
524
+ let suppressed = match &opts {
525
+ Value::Map(m) => matches!(m.borrow().get("auth"), Some(Value::Null)),
526
+ _ => false,
527
+ };
528
+ assert!(suppressed, "auth: null did not survive make_options");
529
+ }
530
+
531
+ #[test]
532
+ fn auth_null_suppresses_an_explicit_apikey_too() {
533
+ let wire = Wire::new();
534
+ let client = ProjectNameSDK::new(jo(vec![
535
+ ("base", Value::str(BASE)),
536
+ ("apikey", Value::str("OPTKEY01")),
537
+ ("auth", Value::Null),
538
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
539
+ ("system", jo(vec![("fetch", wire.fetch())])),
540
+ (
541
+ "feature",
542
+ jo(vec![(
543
+ "secrets",
544
+ jo(vec![
545
+ ("active", Value::Bool(true)),
546
+ providers(vec![memory("APIKEY", "CHAINKEY01")]),
547
+ ]),
548
+ )]),
549
+ ),
550
+ ]));
551
+
552
+ client
553
+ .direct(jo(vec![("path", Value::str("/thing"))]))
554
+ .expect("direct");
555
+
556
+ assert_eq!(call_auth(&wire.api(), 0), None, "wire: {}", wire.trace());
557
+ }
558
+
559
+ #[test]
560
+ fn a_miss_everywhere_leaves_the_header_off() {
561
+ let wire = Wire::new();
562
+ let client = sdk(
563
+ &wire,
564
+ vec![providers(vec![callable(|_name| Value::Noval)])],
565
+ );
566
+
567
+ client
568
+ .direct(jo(vec![("path", Value::str("/thing"))]))
569
+ .expect("direct");
570
+
571
+ // A MISS falls through: the request still goes out, unauthenticated.
572
+ assert_eq!(wire.sent(), 1, "a miss must not refuse the request");
573
+ assert_eq!(call_auth(&wire.api(), 0), None);
574
+ }
575
+
576
+ // A MISS is not an ERROR: the chain CONTINUES past a provider that simply
577
+ // does not have the secret. The other half of sekreto's invariant, and the
578
+ // half that must not be "fixed" by making every miss fail.
579
+ #[test]
580
+ fn a_miss_falls_through_to_the_next_provider() {
581
+ let wire = Wire::new();
582
+ let asked: Rc<RefCell<i64>> = Rc::new(RefCell::new(0));
583
+ let n = asked.clone();
584
+
585
+ let client = sdk(
586
+ &wire,
587
+ vec![providers(vec![
588
+ callable(move |_name| {
589
+ *n.borrow_mut() += 1;
590
+ Value::Noval
591
+ }),
592
+ memory("APIKEY", "SECOND01"),
593
+ ])],
594
+ );
595
+
596
+ client
597
+ .direct(jo(vec![("path", Value::str("/thing"))]))
598
+ .expect("direct");
599
+
600
+ assert_eq!(*asked.borrow(), 1, "the first provider was never asked");
601
+ credential_is(call_auth(&wire.api(), 0), "SECOND01");
602
+ }
603
+
604
+
605
+ #[test]
606
+ fn a_callable_provider_is_accepted_verbatim() {
607
+ let wire = Wire::new();
608
+ let asked: Rc<RefCell<Vec<String>>> = Rc::new(RefCell::new(Vec::new()));
609
+ let seen = asked.clone();
610
+
611
+ let client = sdk(
612
+ &wire,
613
+ vec![providers(vec![callable(move |name| {
614
+ seen.borrow_mut().push(name.to_string());
615
+ Value::str("CUSTOM01")
616
+ })])],
617
+ );
618
+
619
+ client
620
+ .direct(jo(vec![("path", Value::str("/thing"))]))
621
+ .expect("direct");
622
+
623
+ credential_is(call_auth(&wire.api(), 0), "CUSTOM01");
624
+ assert_eq!(asked.borrow().clone(), vec!["apikey".to_string()]);
625
+ }
626
+
627
+ // ---- FAIL-CLOSED: a provider ERROR is not a miss -------------------------
628
+ //
629
+ // sekreto's miss-vs-error invariant: a MISS falls through to the next
630
+ // provider, an ERROR does not. A broken vault must never degrade into an
631
+ // unauthenticated request.
632
+
633
+ #[test]
634
+ fn a_provider_error_fails_direct_rather_than_sending() {
635
+ // THE RULE, asserted first so a regression reports the leak itself.
636
+ let wire = Wire::new();
637
+ let res = sdk(&wire, vec![providers(vec![broken()])])
638
+ .direct(jo(vec![("path", Value::str("/thing"))]))
639
+ .expect("direct itself should not error");
640
+
641
+ assert_eq!(
642
+ wire.sent(),
643
+ 0,
644
+ "a request must not go out unauthenticated because a provider broke, \
645
+ but one reached system.fetch: {}",
646
+ wire.trace()
647
+ );
648
+ assert_eq!(getp(&res, "ok"), Value::Bool(false));
649
+ let err = get_str(&res, "err").unwrap_or_default();
650
+ assert!(
651
+ err.contains(BROKEN_MSG),
652
+ "expected the provider's own message, got: {}",
653
+ err
654
+ );
655
+
656
+ // CONTROL, which makes that zero mean REFUSED rather than UNWIRED: the
657
+ // same construction with a WORKING provider must reach the same
658
+ // transport, once, carrying the credential.
659
+ let control = Wire::new();
660
+ let ok = sdk(&control, vec![providers(vec![working()])])
661
+ .direct(jo(vec![("path", Value::str("/thing"))]))
662
+ .expect("direct");
663
+
664
+ assert_eq!(
665
+ getp(&ok, "ok"),
666
+ Value::Bool(true),
667
+ "the control request failed: {:?}",
668
+ get_str(&ok, "err")
669
+ );
670
+ assert_eq!(
671
+ control.sent(),
672
+ 1,
673
+ "the control request never reached system.fetch, so this test cannot \
674
+ observe a request going out at all"
675
+ );
676
+ credential_is(call_auth(&control.api(), 0), "RAWKEY01");
677
+ }
678
+
679
+ #[test]
680
+ fn a_provider_error_fails_graphql_rather_than_sending() {
681
+ let wire = Wire::new();
682
+ let res = sdk(&wire, vec![providers(vec![broken()])])
683
+ .graphql("{ thing }", Value::empty_map(), Value::empty_map())
684
+ .expect("graphql itself should not error");
685
+
686
+ assert_eq!(
687
+ wire.sent(),
688
+ 0,
689
+ "a graphql request must not go out unauthenticated, but one reached \
690
+ system.fetch: {}",
691
+ wire.trace()
692
+ );
693
+ assert_eq!(getp(&res, "ok"), Value::Bool(false));
694
+ let err = get_str(&res, "err").unwrap_or_default();
695
+ assert!(
696
+ err.contains(BROKEN_MSG),
697
+ "expected the provider's own message, got: {}",
698
+ err
699
+ );
700
+
701
+ let control = Wire::new();
702
+ let ok = sdk(&control, vec![providers(vec![working()])])
703
+ .graphql("{ thing }", Value::empty_map(), Value::empty_map())
704
+ .expect("graphql");
705
+
706
+ assert_eq!(
707
+ getp(&ok, "ok"),
708
+ Value::Bool(true),
709
+ "the control request failed: {:?}",
710
+ get_str(&ok, "err")
711
+ );
712
+ assert_eq!(
713
+ control.sent(),
714
+ 1,
715
+ "the control request never reached system.fetch, so this test cannot \
716
+ observe a request going out at all"
717
+ );
718
+ credential_is(call_auth(&control.api(), 0), "RAWKEY01");
719
+ }
720
+
721
+ #[test]
722
+ fn a_provider_error_fails_the_entity_path_rather_than_sending() {
723
+ let wire = Wire::new();
724
+ let err = entity_request(&sdk(&wire, vec![providers(vec![broken()])]), "/thing");
725
+
726
+ assert_eq!(
727
+ wire.sent(),
728
+ 0,
729
+ "an entity request must not go out unauthenticated, but one reached \
730
+ system.fetch: {}",
731
+ wire.trace()
732
+ );
733
+ let err = err.unwrap_or_default();
734
+ assert!(
735
+ err.contains(BROKEN_MSG),
736
+ "expected the provider's own message, got: {}",
737
+ err
738
+ );
739
+
740
+ let control = Wire::new();
741
+ let ok = entity_request(&sdk(&control, vec![providers(vec![working()])]), "/thing");
742
+
743
+ assert_eq!(ok, None, "the control request failed: {:?}", ok);
744
+ assert_eq!(
745
+ control.sent(),
746
+ 1,
747
+ "the control request never reached system.fetch, so this test cannot \
748
+ observe a request going out at all"
749
+ );
750
+ credential_is(call_auth(&control.api(), 0), "RAWKEY01");
751
+ }
752
+
753
+ // A CHAIN that cannot be BUILT is the same rule one step earlier: an
754
+ // unknown provider kind (a typo in a project's model) must refuse the
755
+ // request rather than send it without a credential.
756
+ #[test]
757
+ fn an_unknown_provider_kind_refuses_rather_than_sending() {
758
+ let wire = Wire::new();
759
+ let res = sdk(
760
+ &wire,
761
+ vec![providers(vec![jo(vec![(
762
+ "kind",
763
+ Value::str("nosuchkind"),
764
+ )])])],
765
+ )
766
+ .direct(jo(vec![("path", Value::str("/thing"))]))
767
+ .expect("direct");
768
+
769
+ assert_eq!(
770
+ wire.sent(),
771
+ 0,
772
+ "a chain that could not be built must not send: {}",
773
+ wire.trace()
774
+ );
775
+ assert_eq!(getp(&res, "ok"), Value::Bool(false));
776
+ let err = get_str(&res, "err").unwrap_or_default();
777
+ assert!(
778
+ err.contains("unknown provider kind"),
779
+ "expected sekreto's own refusal, got: {}",
780
+ err
781
+ );
782
+
783
+ let control = Wire::new();
784
+ sdk(&control, vec![providers(vec![working()])])
785
+ .direct(jo(vec![("path", Value::str("/thing"))]))
786
+ .expect("direct");
787
+ assert_eq!(control.sent(), 1, "the control request never reached the wire");
788
+ }
789
+
790
+ // A MALFORMED entry is the same rule again, and the one a typed port can
791
+ // get wrong silently: `providers` is a Value list, so an entry that is
792
+ // neither a callable nor a spec map (a bare "hashicorp" where a spec was
793
+ // meant) matches no arm. Dropping it leaves the chain quietly SHORTER than
794
+ // the options say - a fail-OPEN that sends the request without the
795
+ // credential the project configured. It must refuse instead, carrying
796
+ // sekreto's own wording, on every wire path.
797
+ const MALFORMED_MSG: &str = "sekreto: not a provider or a provider spec";
798
+
799
+ #[test]
800
+ fn a_malformed_provider_entry_refuses_rather_than_being_dropped() {
801
+ // CONTROL first: the same construction with a WORKING provider reaches
802
+ // the transport exactly once, carrying its credential. Without this a
803
+ // zero below could mean UNWIRED rather than REFUSED.
804
+ let control = Wire::new();
805
+ let ok = sdk(&control, vec![providers(vec![working()])])
806
+ .direct(jo(vec![("path", Value::str("/thing"))]))
807
+ .expect("direct");
808
+ assert_eq!(
809
+ getp(&ok, "ok"),
810
+ Value::Bool(true),
811
+ "the control request failed: {:?}",
812
+ get_str(&ok, "err")
813
+ );
814
+ assert_eq!(
815
+ control.sent(),
816
+ 1,
817
+ "the control request never reached system.fetch, so this test cannot \
818
+ observe a request going out at all"
819
+ );
820
+ credential_is(call_auth(&control.api(), 0), "RAWKEY01");
821
+
822
+ let malformed = || providers(vec![Value::str("hashicorp")]);
823
+ let refused = |what: &str, err: String, wire: &Wire| {
824
+ assert_eq!(
825
+ wire.sent(),
826
+ 0,
827
+ "{}: a malformed provider entry must refuse, not be dropped, but a \
828
+ request reached system.fetch: {}",
829
+ what,
830
+ wire.trace()
831
+ );
832
+ assert!(
833
+ err.contains(MALFORMED_MSG) && err.contains("hashicorp"),
834
+ "{}: expected sekreto's own refusal naming the entry, got: {}",
835
+ what,
836
+ err
837
+ );
838
+ };
839
+
840
+ // The raw paths. This port runs no feature hooks on direct()/graphql()
841
+ // (Main.fragment.rs raw_request calls utility.fetch directly), so the
842
+ // refusal is the TRANSPORT gate's, the same seam the tests above use.
843
+ let wire = Wire::new();
844
+ let res = sdk(&wire, vec![malformed()])
845
+ .direct(jo(vec![("path", Value::str("/thing"))]))
846
+ .expect("direct itself should not error");
847
+ refused("direct", get_str(&res, "err").unwrap_or_default(), &wire);
848
+ assert_eq!(getp(&res, "ok"), Value::Bool(false));
849
+
850
+ let wire = Wire::new();
851
+ let res = sdk(&wire, vec![malformed()])
852
+ .graphql("{ thing }", Value::empty_map(), Value::empty_map())
853
+ .expect("graphql itself should not error");
854
+ refused("graphql", get_str(&res, "err").unwrap_or_default(), &wire);
855
+ assert_eq!(getp(&res, "ok"), Value::Bool(false));
856
+
857
+ // The entity path.
858
+ let wire = Wire::new();
859
+ let err = entity_request(&sdk(&wire, vec![malformed()]), "/thing");
860
+ refused("entity", err.unwrap_or_default(), &wire);
861
+ }
862
+
863
+ // The provider VOCABULARY. The generated plugins.rs index IS the set of
864
+ // kinds this SDK can build (upstream sekreto's contract since its registry
865
+ // was retired), so every definition it declares must carry a usable name -
866
+ // an empty or duplicated one is a kind nothing can name.
867
+ #[test]
868
+ fn the_selected_plugin_kinds_have_distinct_names() {
869
+ let defs = RUSTCRATE::feature::secrets::plugins::definitions();
870
+ let mut names: Vec<String> = defs.iter().map(|d| d.name.clone()).collect();
871
+ let count = names.len();
872
+ names.sort();
873
+ names.dedup();
874
+
875
+ assert_eq!(names.len(), count, "duplicate plugin kind: {:?}", names);
876
+ assert!(
877
+ names.iter().all(|n| !n.is_empty()),
878
+ "a plugin definition with no name is a kind nothing can select"
879
+ );
880
+ }
881
+
882
+ // A SELECTED plugin kind is really in the vocabulary.
883
+ //
884
+ // Construction is where an unknown kind is refused, so a chain that names
885
+ // the kind and still reaches the wire IS the check. The memory store comes
886
+ // FIRST so sekreto's first-hit rule answers from it and the vault is never
887
+ // contacted - the kind has to be declarable, not reachable.
888
+ //
889
+ // Conditional on the kind being selected, because this file ships to
890
+ // projects that take the feature without the `vault` plugin group.
891
+ #[test]
892
+ fn a_selected_plugin_kind_is_in_the_sdk_vocabulary() {
893
+ let defs = RUSTCRATE::feature::secrets::plugins::definitions();
894
+ if !defs.iter().any(|d| "hashicorp" == d.name) {
895
+ // No vault group in this project's model: nothing to assert.
896
+ return;
897
+ }
898
+
899
+ let wire = Wire::new();
900
+ let client = sdk(
901
+ &wire,
902
+ vec![providers(vec![
903
+ memory("APIKEY", "VOCAB01"),
904
+ jo(vec![
905
+ ("kind", Value::str("hashicorp")),
906
+ ("addr", Value::str("https://vault.test")),
907
+ ("token", Value::str("x")),
908
+ ]),
909
+ ])],
910
+ );
911
+
912
+ client
913
+ .direct(jo(vec![("path", Value::str("/thing"))]))
914
+ .expect("direct");
915
+
916
+ assert_eq!(wire.api().len(), 1, "the chain was refused: {}", wire.trace());
917
+ credential_is(call_auth(&wire.api(), 0), "VOCAB01");
918
+ }
919
+
920
+
921
+ // A settled failure must not be held forever: a transient vault outage
922
+ // would otherwise poison the client permanently, every later operation
923
+ // failing with the original error long after the vault recovered.
924
+ #[test]
925
+ fn a_provider_recovers_after_a_transient_failure() {
926
+ let wire = Wire::new();
927
+ let calls = Rc::new(RefCell::new(0i64));
928
+ let n = calls.clone();
929
+
930
+ let client = sdk(
931
+ &wire,
932
+ vec![providers(vec![callable(move |_name| {
933
+ *n.borrow_mut() += 1;
934
+ if 1 == *n.borrow() {
935
+ jo(vec![("__err__", Value::str(BROKEN_MSG))])
936
+ } else {
937
+ Value::str("RECOVERED01")
938
+ }
939
+ })])],
940
+ );
941
+
942
+ let first = client
943
+ .direct(jo(vec![("path", Value::str("/thing"))]))
944
+ .expect("direct");
945
+ assert_eq!(getp(&first, "ok"), Value::Bool(false));
946
+ assert_eq!(wire.sent(), 0);
947
+
948
+ let second = client
949
+ .direct(jo(vec![("path", Value::str("/thing"))]))
950
+ .expect("direct");
951
+ assert_eq!(
952
+ getp(&second, "ok"),
953
+ Value::Bool(true),
954
+ "the second attempt should recover: {:?}",
955
+ get_str(&second, "err")
956
+ );
957
+ credential_is(call_auth(&wire.api(), 0), "RECOVERED01");
958
+ }
959
+
960
+ // `cache: false` is documented as "every resolve asks the chain again".
961
+ #[test]
962
+ fn cache_false_asks_the_chain_on_every_request() {
963
+ let wire = Wire::new();
964
+ let calls = Rc::new(RefCell::new(0i64));
965
+ let n = calls.clone();
966
+
967
+ let client = sdk(
968
+ &wire,
969
+ vec![
970
+ ("cache", Value::Bool(false)),
971
+ providers(vec![callable(move |_name| {
972
+ *n.borrow_mut() += 1;
973
+ Value::str(format!("KEY{}", n.borrow()))
974
+ })]),
975
+ ],
976
+ );
977
+
978
+ for _ in 0..2 {
979
+ client
980
+ .direct(jo(vec![("path", Value::str("/thing"))]))
981
+ .expect("direct");
982
+ }
983
+
984
+ assert!(
985
+ 1 < *calls.borrow(),
986
+ "the chain was asked once and cached, despite cache: false"
987
+ );
988
+ credential_is(call_auth(&wire.api(), 0), "KEY1");
989
+ credential_is(call_auth(&wire.api(), 1), "KEY2");
990
+ }
991
+
992
+ // A MISS IS NOT A CACHEABLE ANSWER - sekreto's own rule, which this feature
993
+ // used to override from the layer above.
994
+ //
995
+ // DEFAULT caching here, which is the whole point: `cache: true` is about
996
+ // holding a HIT (the test below pins that half), and keeping the settled
997
+ // resolution after a miss meant the chain was never asked again for the life
998
+ // of the client. A secret provisioned after startup (a mounted file, a vault
999
+ // policy granted a minute late) was invisible forever.
1000
+ #[test]
1001
+ fn cache_true_re_asks_after_a_miss() {
1002
+ let wire = Wire::new();
1003
+ let calls = Rc::new(RefCell::new(0i64));
1004
+ let present = Rc::new(RefCell::new(false));
1005
+ let n = calls.clone();
1006
+ let p = present.clone();
1007
+
1008
+ let client = sdk(
1009
+ &wire,
1010
+ vec![providers(vec![callable(move |_name| {
1011
+ *n.borrow_mut() += 1;
1012
+ if *p.borrow() {
1013
+ Value::str("LATEKEY01")
1014
+ } else {
1015
+ Value::Noval
1016
+ }
1017
+ })])],
1018
+ );
1019
+
1020
+ client
1021
+ .direct(jo(vec![("path", Value::str("/one"))]))
1022
+ .expect("direct");
1023
+ assert_eq!(
1024
+ call_auth(&wire.api(), 0),
1025
+ None,
1026
+ "the chain has nothing yet, so no credential should go out: {}",
1027
+ wire.trace()
1028
+ );
1029
+
1030
+ let asked = *calls.borrow();
1031
+ assert!(0 < asked, "the chain was never asked");
1032
+
1033
+ // The secret is provisioned while the client is live.
1034
+ *present.borrow_mut() = true;
1035
+
1036
+ client
1037
+ .direct(jo(vec![("path", Value::str("/two"))]))
1038
+ .expect("direct");
1039
+
1040
+ assert!(
1041
+ asked < *calls.borrow(),
1042
+ "the MISS was cached: a secret that appears later can never be picked up"
1043
+ );
1044
+ credential_is(call_auth(&wire.api(), 1), "LATEKEY01");
1045
+ }
1046
+
1047
+ // The other half of the same rule: a HIT is still cached by default, so the
1048
+ // fix above must not turn every request into a chain walk.
1049
+ #[test]
1050
+ fn cache_true_keeps_a_hit() {
1051
+ let wire = Wire::new();
1052
+ let calls = Rc::new(RefCell::new(0i64));
1053
+ let n = calls.clone();
1054
+
1055
+ let client = sdk(
1056
+ &wire,
1057
+ vec![providers(vec![callable(move |_name| {
1058
+ *n.borrow_mut() += 1;
1059
+ Value::str("STABLEKEY01")
1060
+ })])],
1061
+ );
1062
+
1063
+ for _ in 0..2 {
1064
+ client
1065
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1066
+ .expect("direct");
1067
+ }
1068
+
1069
+ assert_eq!(
1070
+ *calls.borrow(),
1071
+ 1,
1072
+ "a hit must be cached under the default cache: true"
1073
+ );
1074
+ }
1075
+
1076
+ // An UNCACHED miss after a hit is a revocation: the resolved value must
1077
+ // stop going out.
1078
+ #[test]
1079
+ fn an_uncached_miss_retracts_the_credential() {
1080
+ let wire = Wire::new();
1081
+ let calls = Rc::new(RefCell::new(0i64));
1082
+ let n = calls.clone();
1083
+
1084
+ let client = sdk(
1085
+ &wire,
1086
+ vec![
1087
+ ("cache", Value::Bool(false)),
1088
+ providers(vec![callable(move |_name| {
1089
+ *n.borrow_mut() += 1;
1090
+ if 1 == *n.borrow() {
1091
+ Value::str("ONCE01")
1092
+ } else {
1093
+ Value::Noval
1094
+ }
1095
+ })]),
1096
+ ],
1097
+ );
1098
+
1099
+ for _ in 0..2 {
1100
+ client
1101
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1102
+ .expect("direct");
1103
+ }
1104
+
1105
+ credential_is(call_auth(&wire.api(), 0), "ONCE01");
1106
+ assert_eq!(
1107
+ call_auth(&wire.api(), 1),
1108
+ None,
1109
+ "a revoked credential kept going out: {}",
1110
+ wire.trace()
1111
+ );
1112
+ }
1113
+
1114
+ #[test]
1115
+ fn the_secret_name_is_configurable() {
1116
+ let wire = Wire::new();
1117
+ let client = sdk(
1118
+ &wire,
1119
+ vec![
1120
+ ("name", Value::str("api.token")),
1121
+ providers(vec![memory("API_TOKEN", "TOKKEY01")]),
1122
+ ],
1123
+ );
1124
+
1125
+ client
1126
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1127
+ .expect("direct");
1128
+
1129
+ credential_is(call_auth(&wire.api(), 0), "TOKKEY01");
1130
+ }
1131
+
1132
+ #[test]
1133
+ fn sekreto_is_live_for_arbitrary_secrets_and_redaction() {
1134
+ let wire = Wire::new();
1135
+ let client = sdk(
1136
+ &wire,
1137
+ vec![providers(vec![memory("DB_PASSWORD", "dbpass01")])],
1138
+ );
1139
+
1140
+ assert_eq!(
1141
+ secrets_call(&client, vec![Value::str("get"), Value::str("db.password")]),
1142
+ Value::str("dbpass01")
1143
+ );
1144
+ assert_eq!(
1145
+ secrets_call(
1146
+ &client,
1147
+ vec![
1148
+ Value::str("redact"),
1149
+ Value::str("the password is dbpass01, keep it safe")
1150
+ ]
1151
+ ),
1152
+ Value::str("the password is [redacted], keep it safe")
1153
+ );
1154
+ }
1155
+
1156
+ // ---- ACCESS-TOKEN EXCHANGE ----------------------------------------------
1157
+ //
1158
+ // What the chain resolves is a REFRESH token, which is POSTed to a token
1159
+ // endpoint for a short-lived ACCESS token; the access token is what the
1160
+ // Authorization header carries; and when the API answers 401 the client
1161
+ // buys another and tries the same request again, once.
1162
+
1163
+ const REFRESH: &str = "REFRESH01";
1164
+
1165
+ fn exchange(extra: Vec<(&str, Value)>) -> (&'static str, Value) {
1166
+ let x = jo(vec![("active", Value::Bool(true))]);
1167
+ for (k, v) in extra {
1168
+ RUSTCRATE::core::helpers::setp(&x, k, v);
1169
+ }
1170
+ ("exchange", x)
1171
+ }
1172
+
1173
+ fn exchange_sdk(wire: &Wire, extra: Vec<(&str, Value)>) -> Rc<ProjectNameSDK> {
1174
+ let mut opts: Vec<(&str, Value)> = vec![
1175
+ ("name", Value::str("refresh_token")),
1176
+ providers(vec![memory("REFRESH_TOKEN", REFRESH)]),
1177
+ ];
1178
+ opts.extend(extra);
1179
+ sdk(wire, opts)
1180
+ }
1181
+
1182
+ fn bodyof(call: &Call) -> Value {
1183
+ let raw = call.body.clone().unwrap_or_default();
1184
+ RUSTCRATE::json_parse(&raw).unwrap_or(Value::Noval)
1185
+ }
1186
+
1187
+ #[test]
1188
+ fn the_refresh_token_buys_an_access_token_and_the_request_carries_it() {
1189
+ let wire = Wire::new();
1190
+ let client = exchange_sdk(&wire, vec![exchange(vec![])]);
1191
+
1192
+ client
1193
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1194
+ .expect("direct");
1195
+
1196
+ assert_eq!(wire.token().len(), 1, "expected exactly one token purchase");
1197
+ assert_eq!(
1198
+ getp(&bodyof(&wire.token()[0]), "refresh_token"),
1199
+ Value::str(REFRESH),
1200
+ "the refresh token is sent in the request field"
1201
+ );
1202
+ assert_eq!(wire.api().len(), 1);
1203
+ credential_is(call_auth(&wire.api(), 0), "ACCESS01");
1204
+ }
1205
+
1206
+ #[test]
1207
+ fn an_explicit_exchange_refresh_wins_over_the_chain() {
1208
+ let wire = Wire::new();
1209
+ let client = exchange_sdk(
1210
+ &wire,
1211
+ vec![exchange(vec![("refresh", Value::str("EXPLICIT01"))])],
1212
+ );
1213
+
1214
+ client
1215
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1216
+ .expect("direct");
1217
+
1218
+ assert_eq!(
1219
+ getp(&bodyof(&wire.token()[0]), "refresh_token"),
1220
+ Value::str("EXPLICIT01")
1221
+ );
1222
+ }
1223
+
1224
+ #[test]
1225
+ fn one_purchase_serves_many_requests() {
1226
+ let wire = Wire::new();
1227
+ let client = exchange_sdk(&wire, vec![exchange(vec![])]);
1228
+
1229
+ for path in ["/one", "/two", "/three"] {
1230
+ client
1231
+ .direct(jo(vec![("path", Value::str(path))]))
1232
+ .expect("direct");
1233
+ }
1234
+
1235
+ assert_eq!(
1236
+ wire.token().len(),
1237
+ 1,
1238
+ "a token still working must not be re-bought"
1239
+ );
1240
+ assert_eq!(wire.api().len(), 3);
1241
+ }
1242
+
1243
+ #[test]
1244
+ fn an_expiry_buys_another_token_and_retries_the_same_request() {
1245
+ let wire = Wire::new().apistatus(&[401, 200]);
1246
+ let client = exchange_sdk(&wire, vec![exchange(vec![])]);
1247
+
1248
+ let res = client
1249
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1250
+ .expect("direct");
1251
+
1252
+ assert_eq!(wire.token().len(), 2, "expected a second token purchase");
1253
+ assert_eq!(wire.api().len(), 2, "expected the request to be retried");
1254
+ credential_is(call_auth(&wire.api(), 0), "ACCESS01");
1255
+ // The retry must carry the NEW token, not the spent one.
1256
+ credential_is(call_auth(&wire.api(), 1), "ACCESS02");
1257
+ assert_eq!(
1258
+ getp(&res, "ok"),
1259
+ Value::Bool(true),
1260
+ "the caller sees the successful retry"
1261
+ );
1262
+ }
1263
+
1264
+ #[test]
1265
+ fn the_retry_happens_once_not_in_a_loop() {
1266
+ // Every API call is refused: a second refusal on a token bought moments
1267
+ // ago is a real failure, and spinning on it would hang instead.
1268
+ let wire = Wire::new().apistatus(&[401]);
1269
+ let client = exchange_sdk(&wire, vec![exchange(vec![])]);
1270
+
1271
+ client
1272
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1273
+ .expect("direct");
1274
+
1275
+ assert_eq!(wire.api().len(), 2, "exactly one retry");
1276
+ assert_eq!(wire.token().len(), 2);
1277
+ }
1278
+
1279
+ #[test]
1280
+ fn a_status_outside_exchange_statuses_is_not_an_expiry() {
1281
+ let wire = Wire::new().apistatus(&[403]);
1282
+ let client = exchange_sdk(&wire, vec![exchange(vec![])]);
1283
+
1284
+ client
1285
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1286
+ .expect("direct");
1287
+
1288
+ assert_eq!(wire.api().len(), 1, "403 is not in the default statuses");
1289
+ assert_eq!(wire.token().len(), 1);
1290
+ }
1291
+
1292
+ #[test]
1293
+ fn exchange_statuses_are_configurable() {
1294
+ let wire = Wire::new().apistatus(&[403, 200]);
1295
+ let client = exchange_sdk(
1296
+ &wire,
1297
+ vec![exchange(vec![(
1298
+ "statuses",
1299
+ Value::list(vec![Value::Num(403.0)]),
1300
+ )])],
1301
+ );
1302
+
1303
+ client
1304
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1305
+ .expect("direct");
1306
+
1307
+ assert_eq!(wire.api().len(), 2, "403 was declared an expiry");
1308
+ }
1309
+
1310
+ #[test]
1311
+ fn the_endpoint_and_field_names_are_configurable_and_the_body_is_serialised() {
1312
+ // A JSON-HOSTILE refresh token: it must arrive as this literal value,
1313
+ // which only holds if the body is serialised rather than concatenated.
1314
+ const NASTY: &str = "re\"fresh\\01\nline";
1315
+
1316
+ let wire = Wire::new().tokenpath("oauth/grant", "token");
1317
+ let client = sdk(
1318
+ &wire,
1319
+ vec![
1320
+ ("name", Value::str("refresh_token")),
1321
+ providers(vec![memory("REFRESH_TOKEN", NASTY)]),
1322
+ exchange(vec![
1323
+ ("path", Value::str("oauth/grant")),
1324
+ ("request", Value::str("grant")),
1325
+ ("response", Value::str("token")),
1326
+ ]),
1327
+ ],
1328
+ );
1329
+
1330
+ client
1331
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1332
+ .expect("direct");
1333
+
1334
+ assert_eq!(wire.token().len(), 1);
1335
+ assert!(
1336
+ wire.token()[0].url.ends_with("/oauth/grant"),
1337
+ "the token endpoint is relative to base: {}",
1338
+ wire.token()[0].url
1339
+ );
1340
+ assert_eq!(
1341
+ getp(&bodyof(&wire.token()[0]), "grant"),
1342
+ Value::str(NASTY),
1343
+ "the refresh token must survive serialisation intact"
1344
+ );
1345
+ credential_is(call_auth(&wire.api(), 0), "ACCESS01");
1346
+ }
1347
+
1348
+ #[test]
1349
+ fn an_explicit_apikey_is_spent_before_anything_is_bought() {
1350
+ let wire = Wire::new();
1351
+ let client = ProjectNameSDK::new(jo(vec![
1352
+ ("base", Value::str(BASE)),
1353
+ ("apikey", Value::str("HELDTOKEN01")),
1354
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
1355
+ ("system", jo(vec![("fetch", wire.fetch())])),
1356
+ (
1357
+ "feature",
1358
+ jo(vec![(
1359
+ "secrets",
1360
+ jo(vec![
1361
+ ("active", Value::Bool(true)),
1362
+ ("name", Value::str("refresh_token")),
1363
+ providers(vec![memory("REFRESH_TOKEN", REFRESH)]),
1364
+ exchange(vec![]),
1365
+ ]),
1366
+ )]),
1367
+ ),
1368
+ ]));
1369
+
1370
+ client
1371
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1372
+ .expect("direct");
1373
+
1374
+ assert_eq!(wire.token().len(), 0, "nothing needed buying");
1375
+ credential_is(call_auth(&wire.api(), 0), "HELDTOKEN01");
1376
+ }
1377
+
1378
+ #[test]
1379
+ fn a_held_apikey_that_has_expired_falls_through_to_the_exchange() {
1380
+ let wire = Wire::new().apistatus(&[401, 200]);
1381
+ let client = ProjectNameSDK::new(jo(vec![
1382
+ ("base", Value::str(BASE)),
1383
+ ("apikey", Value::str("STALETOKEN01")),
1384
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
1385
+ ("system", jo(vec![("fetch", wire.fetch())])),
1386
+ (
1387
+ "feature",
1388
+ jo(vec![(
1389
+ "secrets",
1390
+ jo(vec![
1391
+ ("active", Value::Bool(true)),
1392
+ ("name", Value::str("refresh_token")),
1393
+ providers(vec![memory("REFRESH_TOKEN", REFRESH)]),
1394
+ exchange(vec![]),
1395
+ ]),
1396
+ )]),
1397
+ ),
1398
+ ]));
1399
+
1400
+ client
1401
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1402
+ .expect("direct");
1403
+
1404
+ credential_is(call_auth(&wire.api(), 0), "STALETOKEN01");
1405
+ credential_is(call_auth(&wire.api(), 1), "ACCESS01");
1406
+ }
1407
+
1408
+ #[test]
1409
+ fn no_refresh_token_anywhere_is_an_error_not_an_unauthenticated_call() {
1410
+ let wire = Wire::new();
1411
+ let client = sdk(
1412
+ &wire,
1413
+ vec![
1414
+ ("name", Value::str("refresh_token")),
1415
+ providers(vec![]),
1416
+ exchange(vec![]),
1417
+ ],
1418
+ );
1419
+
1420
+ let res = client
1421
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1422
+ .expect("direct");
1423
+
1424
+ assert_eq!(getp(&res, "ok"), Value::Bool(false));
1425
+ assert_eq!(
1426
+ wire.api().len(),
1427
+ 0,
1428
+ "a request must not go out unauthenticated because the chain was empty: {}",
1429
+ wire.trace()
1430
+ );
1431
+ let err = get_str(&res, "err").unwrap_or_default();
1432
+ assert!(
1433
+ err.contains("no refresh token"),
1434
+ "expected the exchange's own message, got: {}",
1435
+ err
1436
+ );
1437
+ }
1438
+
1439
+ #[test]
1440
+ fn a_failing_token_endpoint_surfaces_the_api_refusal_not_a_spin() {
1441
+ // The first purchase succeeds; the second (after the 401) does not.
1442
+ let wire = Wire::new().apistatus(&[401]).tokenstatus(&[200, 500]);
1443
+ let client = exchange_sdk(&wire, vec![exchange(vec![])]);
1444
+
1445
+ let res = client
1446
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1447
+ .expect("the caller got an answer rather than a hang");
1448
+
1449
+ assert_eq!(getp(&res, "status"), Value::Num(401.0));
1450
+ assert_eq!(wire.api().len(), 1, "no retry after a failed purchase");
1451
+ }
1452
+
1453
+ #[test]
1454
+ fn exchange_auth_null_suppresses_and_is_never_retried() {
1455
+ let wire = Wire::new().apistatus(&[401]);
1456
+ let client = ProjectNameSDK::new(jo(vec![
1457
+ ("base", Value::str(BASE)),
1458
+ ("auth", Value::Null),
1459
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
1460
+ ("system", jo(vec![("fetch", wire.fetch())])),
1461
+ (
1462
+ "feature",
1463
+ jo(vec![(
1464
+ "secrets",
1465
+ jo(vec![
1466
+ ("active", Value::Bool(true)),
1467
+ ("name", Value::str("refresh_token")),
1468
+ providers(vec![memory("REFRESH_TOKEN", REFRESH)]),
1469
+ exchange(vec![]),
1470
+ ]),
1471
+ )]),
1472
+ ),
1473
+ ]));
1474
+
1475
+ client
1476
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1477
+ .expect("direct");
1478
+
1479
+ assert_eq!(
1480
+ wire.api().len(),
1481
+ 1,
1482
+ "a suppressed request must not be retried"
1483
+ );
1484
+ assert_eq!(
1485
+ call_auth(&wire.api(), 0),
1486
+ None,
1487
+ "no credential may be sent when auth is suppressed: {}",
1488
+ wire.trace()
1489
+ );
1490
+
1491
+ // AND NO PURCHASE. resolve() runs before with_refresh's suppression
1492
+ // check, so the refresh token used to go to the token endpoint in a
1493
+ // request body even here. Stopping the retry does not unsend it, and
1494
+ // only the token endpoint can see this.
1495
+ assert_eq!(
1496
+ wire.token().len(),
1497
+ 0,
1498
+ "auth null suppressed the credential but the refresh token was still \
1499
+ POSTed to the exchange endpoint: {}",
1500
+ wire.trace()
1501
+ );
1502
+ }
1503
+
1504
+ // The exchange with NO system.fetch: the ordinary case, where make_options
1505
+ // leaves the seam unset and the purchase takes its own raw HTTP path. There
1506
+ // is no token endpoint to talk to here, so what this pins is that the
1507
+ // fallback EXISTS and reports - before this, `buy` with no custom transport
1508
+ // simply had nothing to call - and that a failed purchase refuses the
1509
+ // operation rather than sending it unauthenticated.
1510
+ #[test]
1511
+ fn the_exchange_has_a_raw_transport_when_no_system_fetch_is_given() {
1512
+ // Port 1 is reserved and never listening, so the connection is refused
1513
+ // immediately rather than hanging on a timeout.
1514
+ let client = ProjectNameSDK::new(jo(vec![
1515
+ ("base", Value::str("http://127.0.0.1:1/api")),
1516
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
1517
+ (
1518
+ "feature",
1519
+ jo(vec![(
1520
+ "secrets",
1521
+ jo(vec![
1522
+ ("active", Value::Bool(true)),
1523
+ ("name", Value::str("refresh_token")),
1524
+ providers(vec![memory("REFRESH_TOKEN", REFRESH)]),
1525
+ exchange(vec![]),
1526
+ ]),
1527
+ )]),
1528
+ ),
1529
+ ]));
1530
+
1531
+ let res = client
1532
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1533
+ .expect("direct");
1534
+
1535
+ assert_eq!(getp(&res, "ok"), Value::Bool(false));
1536
+ let err = get_str(&res, "err").unwrap_or_default();
1537
+ assert!(
1538
+ err.contains("token exchange"),
1539
+ "expected the exchange's own refusal from the raw transport, got: {}",
1540
+ err
1541
+ );
1542
+ }
1543
+
1544
+
1545
+ // TEST MODE BUYS NOTHING: the test feature replaces the transport so no
1546
+ // request leaves the process, and an exchange would be the one call it
1547
+ // could not stop.
1548
+ #[test]
1549
+ fn test_mode_buys_nothing_and_needs_no_token_endpoint() {
1550
+ let wire = Wire::new();
1551
+ let client = RUSTCRATE::test_sdk(
1552
+ Value::Noval,
1553
+ jo(vec![
1554
+ ("base", Value::str(BASE)),
1555
+ ("allow", jo(vec![("op", Value::str("direct,graphql"))])),
1556
+ ("system", jo(vec![("fetch", wire.fetch())])),
1557
+ (
1558
+ "feature",
1559
+ jo(vec![(
1560
+ "secrets",
1561
+ jo(vec![
1562
+ ("active", Value::Bool(true)),
1563
+ ("name", Value::str("refresh_token")),
1564
+ providers(vec![memory("REFRESH_TOKEN", REFRESH)]),
1565
+ exchange(vec![]),
1566
+ ]),
1567
+ )]),
1568
+ ),
1569
+ ]),
1570
+ );
1571
+
1572
+ client
1573
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1574
+ .expect("direct");
1575
+
1576
+ assert_eq!(wire.sent(), 0, "test mode must not do IO");
1577
+ // A deterministic placeholder, so offline suites need no configuration.
1578
+ assert_eq!(
1579
+ secrets_call(&client, vec![Value::str("credential")]),
1580
+ Value::str("test-access_token")
1581
+ );
1582
+ }
1583
+
1584
+ // The exchange OFF leaves the feature exactly as it was.
1585
+ #[test]
1586
+ fn exchange_off_leaves_the_feature_exactly_as_it_was() {
1587
+ let wire = Wire::new();
1588
+ let client = sdk(&wire, vec![providers(vec![memory("APIKEY", "PLAINKEY01")])]);
1589
+
1590
+ client
1591
+ .direct(jo(vec![("path", Value::str("/thing"))]))
1592
+ .expect("direct");
1593
+
1594
+ assert_eq!(wire.token().len(), 0, "nothing may be bought");
1595
+ credential_is(call_auth(&wire.api(), 0), "PLAINKEY01");
1596
+ }
1597
+
1598
+ // Keep `to_int`/`ja` referenced: they belong to the seam this file
1599
+ // documents (transport-shaped responses, the system.fetch argument list),
1600
+ // and an unused import would be a warning in a template that ships.
1601
+ #[test]
1602
+ fn helpers_are_the_ones_the_seam_uses() {
1603
+ assert_eq!(to_int(&Value::Num(401.0)), 401);
1604
+ assert!(matches!(ja(vec![Value::Noval]), Value::List(_)));
1605
+ }