@voxgig/sdkgen 4.10.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 (304) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/package.json +1 -1
  3. package/project/.sdk/model/feature/secrets.aon +330 -0
  4. package/project/.sdk/model/target/c.aon +15 -2
  5. package/project/.sdk/model/target/cpp.aon +18 -0
  6. package/project/.sdk/model/target/lua.aon +17 -0
  7. package/project/.sdk/model/target/ocaml.aon +48 -5
  8. package/project/.sdk/model/target/zig.aon +30 -4
  9. package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
  10. package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
  11. package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
  12. package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
  13. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
  14. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
  15. package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
  16. package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
  17. package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
  18. package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
  19. package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
  20. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
  21. package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
  22. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
  23. package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
  24. package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
  25. package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
  26. package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
  27. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
  28. package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
  29. package/project/.sdk/tm/c/Makefile +58 -9
  30. package/project/.sdk/tm/c/core/sdk.h +10 -0
  31. package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
  32. package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
  33. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
  34. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
  35. package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
  36. package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
  37. package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
  38. package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
  39. package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
  40. package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
  41. package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
  42. package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
  43. package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
  44. package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
  45. package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
  46. package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
  47. package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
  48. package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
  49. package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
  50. package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
  51. package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
  52. package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
  53. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
  54. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
  55. package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
  56. package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
  57. package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
  58. package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
  59. package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
  60. package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
  61. package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
  62. package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
  63. package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
  64. package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
  65. package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
  66. package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
  67. package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
  68. package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
  69. package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
  70. package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
  71. package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
  72. package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
  73. package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
  74. package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
  75. package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
  76. package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
  77. package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
  78. package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
  79. package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
  80. package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
  81. package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
  82. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
  83. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
  84. package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
  85. package/project/.sdk/tm/c/feature/secrets.c +797 -0
  86. package/project/.sdk/tm/c/feature/secrets.h +46 -0
  87. package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
  88. package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
  89. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
  90. package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
  91. package/project/.sdk/tm/cpp/Makefile +48 -4
  92. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
  93. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
  94. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
  95. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
  96. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
  97. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
  98. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
  99. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
  100. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
  101. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
  102. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
  103. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
  104. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
  105. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
  106. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
  107. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
  108. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
  109. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
  110. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
  111. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
  112. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
  113. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
  114. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
  115. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
  116. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
  117. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
  118. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
  119. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
  120. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
  121. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
  122. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
  123. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
  124. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
  125. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
  126. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
  127. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
  128. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
  129. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
  130. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
  131. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
  132. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
  133. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
  134. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
  135. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
  136. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
  137. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
  138. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
  139. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
  140. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
  141. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
  142. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
  143. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
  144. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
  145. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
  146. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
  147. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
  148. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
  149. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
  150. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
  151. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
  152. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
  153. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
  154. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
  155. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
  156. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
  157. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
  158. package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
  159. package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
  160. package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
  161. package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
  162. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
  163. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
  164. package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
  165. package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
  166. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
  167. package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
  168. package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
  169. package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
  170. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
  171. package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
  172. package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
  173. package/project/.sdk/tm/lua/Makefile +15 -4
  174. package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
  175. package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
  176. package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
  177. package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
  178. package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
  179. package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
  180. package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
  181. package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
  182. package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
  183. package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
  184. package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
  185. package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
  186. package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
  187. package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
  188. package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
  189. package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
  190. package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
  191. package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
  192. package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
  193. package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
  194. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
  195. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
  196. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
  197. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
  198. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
  199. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
  200. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
  201. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
  202. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
  203. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
  204. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
  205. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
  206. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
  207. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
  208. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
  209. package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
  210. package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
  211. package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
  212. package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
  213. package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
  214. package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
  215. package/project/.sdk/tm/ocaml/Makefile +52 -8
  216. package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
  217. package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
  218. package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
  219. package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
  220. package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
  221. package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
  222. package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
  223. package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
  224. package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
  225. package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
  226. package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
  227. package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
  228. package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
  229. package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
  230. package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
  231. package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
  232. package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
  233. package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
  234. package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
  235. package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
  236. package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
  237. package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
  238. package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
  239. package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
  240. package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
  241. package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
  242. package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
  243. package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
  244. package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
  245. package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
  246. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
  247. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
  248. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
  249. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
  250. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
  251. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
  252. package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
  253. package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
  254. package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
  255. package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
  256. package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
  257. package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
  258. package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
  259. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
  260. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
  261. package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
  262. package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
  263. package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
  264. package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
  265. package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
  266. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
  267. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
  268. package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
  269. package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
  270. package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
  271. package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
  272. package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
  273. package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
  274. package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
  275. package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
  276. package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
  277. package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
  278. package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
  279. package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
  280. package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
  281. package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
  282. package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
  283. package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
  284. package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
  285. package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
  286. package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
  287. package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
  288. package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
  289. package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
  290. package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
  291. package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
  292. package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
  293. package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
  294. package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
  295. package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
  296. package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
  297. package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
  298. package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
  299. package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
  300. package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
  301. package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
  302. package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
  303. package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
  304. package/project/sdkgen-package.json +1 -1
@@ -2,6 +2,7 @@
2
2
  import {
3
3
  Content,
4
4
  File,
5
+ Folder,
5
6
  cmp,
6
7
  configDefinition,
7
8
  configReprSetting,
@@ -26,6 +27,312 @@ import {
26
27
  } from './utility_c'
27
28
 
28
29
 
30
+ // PLUGIN DEFINITIONS PER FEATURE (the c peer of Config_go's featurePlugins
31
+ // map and Main_rust's generated plugins.rs).
32
+ //
33
+ // Upstream sekreto retired its self-registration registry for voxgig/plugin
34
+ // definitions: a provider kind the caller did not pass in `sek_options.
35
+ // plugins` is unknown to that Sekreto. So the model's choice of plugin
36
+ // groups IS the SDK's provider vocabulary, and the generated code names each
37
+ // active group's constructor symbol (`def: c:` in model/feature/secrets.aon
38
+ // - `sek_plugin_hashicorp`, the `Definition *(void)` each vendored kind
39
+ // file defines) and nothing else. A symbol named here whose file the plugin
40
+ // trim removed is an unresolved reference at link time - a loud failure,
41
+ // which is the right kind.
42
+ //
43
+ // One entry per ACTIVE feature that declares a `plugin` map at all, read
44
+ // with `only_active: false` (pluginExcludesFor's subtlety: the feature
45
+ // object a component is handed has already been filtered, so a feature
46
+ // whose groups are all off would otherwise look like one with no plugin
47
+ // machinery, and its kinds.c - which the Makefile reads as the feature's
48
+ // WIRING - would not be emitted).
49
+ function pluginDefinitions(model: Model, target: any):
50
+ Record<string, { syms: string[], groups: number }> {
51
+ const out: Record<string, { syms: string[], groups: number }> = {}
52
+ const feature = targetFeatures(model, target)
53
+
54
+ each(feature, (f: any) => {
55
+ const declared = getModelPath(model,
56
+ `main.${KIT}.feature.${f.name}.plugin`,
57
+ { required: false, only_active: false }) || {}
58
+ if (0 === Object.keys(declared).length) return
59
+
60
+ const syms = new Set<string>()
61
+ let groups = 0
62
+ each(declared, (plugin: any) => {
63
+ // Filter on `active` HERE rather than trusting the feature object to
64
+ // arrive filtered (Config_go's note): getting this wrong names a
65
+ // constructor for a file the trim just deleted.
66
+ if (true !== plugin.active) return
67
+ const defs = Object.keys(plugin.def?.[target.name] || {})
68
+ if (0 < defs.length) groups++
69
+ for (const sym of defs) syms.add(sym)
70
+ })
71
+
72
+ out[f.name] = { syms: Array.from(syms).sort(), groups }
73
+ })
74
+
75
+ return out
76
+ }
77
+
78
+
79
+ // feature/<name>/kinds.c - GENERATED, one per plugin-bearing active feature.
80
+ //
81
+ // It cannot live in core/config.c: that translation unit must not name the
82
+ // vendored voxgig/plugin's `Definition` type, which is why sdk.h types the
83
+ // accessor as void** (the same reason go hides its list behind []any). It
84
+ // sits one level ABOVE the vendored sekreto/, plugin/ and plugins/
85
+ // directories on purpose: the vendoring guard fails any non-vendored file
86
+ // inside a vendor dir, and this one is generated.
87
+ //
88
+ // Beside it goes feature/<name>/kinds.mk, the feature's BUILD WIRING: a
89
+ // generated make fragment that tm/c/Makefile reads through
90
+ // `-include $(wildcard feature/*/kinds.mk)`. The Makefile itself names no
91
+ // feature (the `nothing left behind names a dropped feature` guard holds a
92
+ // trimmed template tree to that), so everything a payload needs from the
93
+ // build is stated here, from the model: the vendored cores to compile, the
94
+ // suite to run, and - only when a plugin group is active - the plugin layer
95
+ // with the external libraries it brings. A tree whose model never
96
+ // activated the feature has no fragment, compiles none of the payload and
97
+ // links libc alone. Both files are emitted for an active feature with NO
98
+ // active group as well - an [env, memory] chain still needs the sekreto
99
+ // core - with an empty definitions list and no plugin layer.
100
+ //
101
+ // For `secrets` it additionally carries `secrets_rawfetch`, the
102
+ // token-exchange transport of last resort (go's rawExchangeFetch). The c
103
+ // core ships no HTTP client (utility/fetcher.c), and the decision for this
104
+ // target is to bundle one INSIDE the gated feature: libcurl, compiled in
105
+ // only when a plugin group is active, so that an SDK without secrets - or
106
+ // with secrets and a chain of built-ins - still ships zero external
107
+ // dependencies. The Makefile adds -lcurl on the same condition (a kind file
108
+ // present), so the two cannot disagree. With no group active the exchange
109
+ // still works through a caller-supplied options.system.fetch, which every
110
+ // live c request already lives under; only the fallback is missing, and it
111
+ // says so.
112
+ const FeaturePlugins = cmp(async function FeaturePlugins(props: any) {
113
+ const ctx$ = props.ctx$
114
+ const target = props.target
115
+ const model: Model = ctx$.model
116
+
117
+ const defs = pluginDefinitions(model, target)
118
+ if (0 === Object.keys(defs).length) return
119
+
120
+ Folder({ name: 'feature' }, () => {
121
+ for (const fname of Object.keys(defs).sort()) {
122
+ const { syms, groups } = defs[fname]
123
+
124
+ Folder({ name: fname }, () => {
125
+ // The build wiring (see above). Paths are SDK-root-relative, as the
126
+ // Makefile's own globs are. `feature/<name>.c` is NOT listed: the
127
+ // Makefile's feature/*.c glob already compiles every feature's own
128
+ // file, and its headers are on INC through the generic payload
129
+ // -I paths.
130
+ File({ name: 'kinds.mk' }, () => {
131
+ Content(`# Generated beside kinds.c: what the \`${fname}\` feature needs from the
132
+ # build, read by the Makefile through \`-include $(wildcard feature/*/kinds.mk)\`.
133
+ # Without this file none of the feature's vendored payload is compiled or
134
+ # linked. Do not hand-edit - change the model and regenerate.
135
+
136
+ # The vendored cores every chain needs (sekreto and the voxgig/plugin host it
137
+ # is built on), and the feature's gated suite.
138
+ FEATURE_SRCS += $(wildcard feature/${fname}/sekreto/*.c feature/${fname}/plugin/*.c)
139
+ FEATURE_TEST_SRCS += $(wildcard tests/feature/${fname}/*.c)
140
+ `)
141
+ if (0 === groups) {
142
+ Content(`
143
+ # No plugin group is active: the plugin layer (the kinds, the socket HTTP
144
+ # client and its OpenSSL binding, the encoders, the clock and the
145
+ # child-process launcher) is on disk but NOT compiled, and nothing beyond
146
+ # libc is linked. A chain of built-ins needs none of it.
147
+ `)
148
+ }
149
+ else {
150
+ Content(`
151
+ # A plugin group is active: the selected kinds and the five shared helpers
152
+ # they call (the socket HTTP client and its OpenSSL binding, the encoders,
153
+ # the clock and the child-process launcher), with the two external
154
+ # libraries they bring - OpenSSL for the vault kinds' TLS, libcurl for the
155
+ # token-exchange transport of last resort in kinds.c.
156
+ FEATURE_SRCS += $(wildcard feature/${fname}/plugins/*.c)
157
+ LDLIBS += -lssl -lcrypto -lcurl
158
+ `)
159
+ }
160
+ })
161
+
162
+ File({ name: 'kinds.c' }, () => {
163
+ Content(`// Generated: the plugin definitions the model selected for the \`${fname}\`
164
+ // feature's provider chain (the c peer of go's core.FeaturePlugins), read
165
+ // back by core/config.c's feature_plugins("${fname}", &n).
166
+ //
167
+ // GENERATED beside kinds.mk, the build wiring tm/c/Makefile includes. Do
168
+ // not hand-edit - change the model's plugin groups and regenerate.
169
+
170
+ #include "sdk.h"
171
+
172
+ #include "sekreto.h"
173
+
174
+ #include <stddef.h>
175
+ #include <stdlib.h>
176
+ #include <string.h>
177
+
178
+ // One prototype per selected kind: the \`Definition *(void)\` constructor
179
+ // its vendored file defines (plugins/sekretoplugins.h declares all ten;
180
+ // naming only these keeps the link line the boundary upstream intends).
181
+ ${syms.map((sym: string) => `Definition* ${sym}(void);
182
+ `).join('')}
183
+ ${0 === syms.length ?
184
+ `// No plugin group is active: the chain can name the four built-in kinds
185
+ // (env, memory, dotenv, file) and a custom provider, and nothing else.
186
+ void** ${fname}_plugins(size_t* n) {
187
+ *n = 0;
188
+ return NULL;
189
+ }
190
+ ` :
191
+ `static void* ${fname.toUpperCase()}_KINDS[${syms.length}];
192
+
193
+ void** ${fname}_plugins(size_t* n) {
194
+ ${syms.map((sym: string, i: number) => ` ${fname.toUpperCase()}_KINDS[${i}] = ${sym}();
195
+ `).join('')} *n = ${syms.length};
196
+ return ${fname.toUpperCase()}_KINDS;
197
+ }
198
+ `}`)
199
+
200
+ if ('secrets' !== fname) return
201
+
202
+ if (0 === groups) {
203
+ Content(`
204
+ // THE EXCHANGE TRANSPORT OF LAST RESORT, when no plugin group is active:
205
+ // there is none. The c core ships no HTTP client, and libcurl is bundled
206
+ // with the plugin groups only (see tm/c/Makefile), so a token purchase
207
+ // needs options.system.fetch - the seam every live c request already uses.
208
+ // Reached only by an exchange whose caller supplied no transport; a chain
209
+ // that resolves a static credential never comes here.
210
+ voxgig_value* secrets_rawfetch(Context* ctx, const char* url,
211
+ voxgig_value* fetchdef, PNError** err) {
212
+ (void)url; (void)fetchdef;
213
+ *err = context_make_error(ctx, "secrets_no_transport",
214
+ "secrets: the token exchange has no HTTP transport: this SDK selected no "
215
+ "secrets plugin group, so libcurl is not linked; supply "
216
+ "options.system.fetch or activate a plugin group");
217
+ return NULL;
218
+ }
219
+ `)
220
+ return
221
+ }
222
+
223
+ Content(`
224
+ // THE EXCHANGE TRANSPORT OF LAST RESORT (go's rawExchangeFetch): plain
225
+ // libcurl, answering the same transport-shaped map the system.fetch seam
226
+ // promises ({status, statusText, headers, json(), body}). It exists so an
227
+ // exchange works with ordinary SDK options - requiring a custom transport
228
+ // for the COMMON case would refuse every live token purchase before a
229
+ // request was made. Deliberately NOT the SDK transport: that is what the
230
+ // secrets feature wraps, and sending the token request back through it
231
+ // would recurse on the first expiry.
232
+ //
233
+ // libcurl is linked because a plugin group is active in this model; the
234
+ // Makefile adds -lcurl on exactly that condition.
235
+
236
+ #include <curl/curl.h>
237
+
238
+ typedef struct {
239
+ char* data;
240
+ size_t len;
241
+ } SecretsBuf;
242
+
243
+ static size_t secrets_curl_write(char* ptr, size_t size, size_t nmemb, void* ud) {
244
+ SecretsBuf* b = (SecretsBuf*)ud;
245
+ size_t add = size * nmemb;
246
+ char* grown = (char*)realloc(b->data, b->len + add + 1);
247
+ if (NULL == grown) return 0;
248
+ b->data = grown;
249
+ memcpy(b->data + b->len, ptr, add);
250
+ b->len += add;
251
+ b->data[b->len] = '\\0';
252
+ return add;
253
+ }
254
+
255
+ voxgig_value* secrets_rawfetch(Context* ctx, const char* url,
256
+ voxgig_value* fetchdef, PNError** err) {
257
+ static bool inited = false;
258
+ *err = NULL;
259
+ if (!inited) {
260
+ curl_global_init(CURL_GLOBAL_DEFAULT);
261
+ inited = true;
262
+ }
263
+
264
+ CURL* curl = curl_easy_init();
265
+ if (NULL == curl) {
266
+ *err = context_make_error(ctx, "secrets_transport", "secrets: curl_easy_init failed");
267
+ return NULL;
268
+ }
269
+
270
+ const char* method = get_str(fetchdef, "method");
271
+ if (NULL == method || '\\0' == method[0]) method = "POST";
272
+
273
+ struct curl_slist* hdrs = NULL;
274
+ voxgig_value* headers = getp(fetchdef, "headers");
275
+ if (voxgig_is_map(headers)) {
276
+ voxgig_map* hm = voxgig_as_map(headers);
277
+ for (size_t i = 0; i < hm->len; i++) {
278
+ if (!voxgig_is_string(hm->entries[i].value)) continue;
279
+ size_t klen = strlen(hm->entries[i].key);
280
+ const char* v = voxgig_as_string(hm->entries[i].value);
281
+ char* line = (char*)malloc(klen + 2 + strlen(v) + 1);
282
+ sprintf(line, "%s: %s", hm->entries[i].key, v);
283
+ hdrs = curl_slist_append(hdrs, line);
284
+ free(line);
285
+ }
286
+ }
287
+
288
+ SecretsBuf body = {NULL, 0};
289
+ curl_easy_setopt(curl, CURLOPT_URL, url);
290
+ curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, method);
291
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, hdrs);
292
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L);
293
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, secrets_curl_write);
294
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body);
295
+ const char* reqbody = get_str(fetchdef, "body");
296
+ if (NULL != reqbody) {
297
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, reqbody);
298
+ }
299
+
300
+ CURLcode rc = curl_easy_perform(curl);
301
+ long status = 0;
302
+ if (CURLE_OK == rc) {
303
+ curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &status);
304
+ }
305
+ curl_slist_free_all(hdrs);
306
+ curl_easy_cleanup(curl);
307
+
308
+ if (CURLE_OK != rc) {
309
+ char msg[512];
310
+ snprintf(msg, sizeof(msg), "secrets: token exchange transport failed: %s (URL was: \\"%s\\")",
311
+ curl_easy_strerror(rc), url);
312
+ free(body.data);
313
+ *err = context_make_error(ctx, "secrets_transport", msg);
314
+ return NULL;
315
+ }
316
+
317
+ const char* text = body.data ? body.data : "";
318
+ voxgig_value* parsed = json_parse(text);
319
+ voxgig_value* out = cmap(5,
320
+ "status", v_num((double)status),
321
+ "statusText", v_str(status >= 400 ? "ERR" : "OK"),
322
+ "headers", v_map(),
323
+ "json", json_thunk(parsed),
324
+ "body", v_str(text));
325
+ free(body.data);
326
+ return out;
327
+ }
328
+ `)
329
+ })
330
+ })
331
+ }
332
+ })
333
+ })
334
+
335
+
29
336
  // core/config.c: make_config() builds the embedded API model as a Value;
30
337
  // make_feature(name) is the N-feature-safe factory the client uses to
31
338
  // instantiate features named in the options (mirrors Config_rust).
@@ -226,11 +533,41 @@ Feature* make_feature(const char* name) {
226
533
 
227
534
  Content(` return feature_base_new();
228
535
  }
536
+ `)
537
+
538
+ // The plugin-definitions accessor (sdk.h feature_plugins), EMITTED
539
+ // UNCONDITIONALLY so the prototype in sdk.h always has a definition,
540
+ // and EMPTY unless a plugin-bearing feature is active: each such
541
+ // feature's list lives in its generated feature/<name>/kinds.c (see
542
+ // FeaturePlugins above), which this dispatches to by name, so this
543
+ // translation unit never names the vendored plugin's types.
544
+ const plugged = Object.keys(pluginDefinitions(model, target)).sort()
545
+
546
+ Content(`
547
+ `)
548
+ for (const fname of plugged) {
549
+ Content(`void** ${fname}_plugins(size_t* n);
550
+ `)
551
+ }
552
+
553
+ Content(`
554
+ void** feature_plugins(const char* name, size_t* n) {
555
+ `)
556
+ for (const fname of plugged) {
557
+ Content(` if (strcmp(name, "${fname}") == 0) return ${fname}_plugins(n);
558
+ `)
559
+ }
560
+ Content(` (void)name;
561
+ *n = 0;
562
+ return NULL;
563
+ }
229
564
  `)
230
565
  })
231
566
  })
232
567
 
233
568
 
234
569
  export {
235
- Config
570
+ Config,
571
+ FeaturePlugins,
572
+ pluginDefinitions,
236
573
  }
@@ -4,6 +4,8 @@ import * as Path from 'node:path'
4
4
  import {
5
5
  cmp, each,
6
6
  File, Copy, Folder, Fragment,
7
+ pluginExcludes,
8
+ targetFeatures,
7
9
  } from '@voxgig/sdkgen'
8
10
 
9
11
 
@@ -19,7 +21,7 @@ import {
19
21
 
20
22
 
21
23
  import { Package } from './Package_c'
22
- import { Config } from './Config_c'
24
+ import { Config, FeaturePlugins } from './Config_c'
23
25
  import { Gitignore } from './Gitignore_c'
24
26
  import { MainEntity } from './MainEntity_c'
25
27
  import { EntityBase } from './EntityBase_c'
@@ -33,15 +35,62 @@ const Main = cmp(async function Main(props: any) {
33
35
 
34
36
  const entity: ModelEntity = getModelPath(model, `main.${KIT}.entity`)
35
37
 
38
+ // THE PLUGIN TRIM FOR A FEATURE THAT IS ITSELF OFF (Main_scala's
39
+ // inactivePluginExcludes, for the same reason one target over).
40
+ //
41
+ // pluginExcludes(model) below walks only the model's ACTIVE features, so
42
+ // a `secrets` declared `active: false` keeps every declared group's
43
+ // vendored kind file in the tree. For c that is not merely untidy: the
44
+ // Makefile decides whether to compile the plugin layer - and to link
45
+ // OpenSSL and libcurl - from whether a KIND FILE is present under
46
+ // feature/secrets/plugins/, so the files have to go. Every declared group
47
+ // of an inactive feature goes, not only the groups marked inactive: a
48
+ // feature that is off has no active plugins whatever its `plugin` map
49
+ // says (targetFeatures drops it before Config ever reads a group). The
50
+ // feature's own source and the vendored cores are left to the Makefile's
51
+ // wiring gate (feature/secrets/kinds.c is generated only for an active
52
+ // feature; without it nothing of the feature is compiled) and to
53
+ // `target add`, which trims the whole container for a real project.
54
+ //
55
+ // Rooting matches pluginExcludes': c's declared paths are
56
+ // target-root-relative, which is this Copy's root, and the other
57
+ // targets' paths in the same list cannot match anything in a c tree.
58
+ const feature = targetFeatures(model, target)
59
+ const esc = (s: string) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
60
+ const allfeature = getModelPath(model, `main.${KIT}.feature`,
61
+ { required: false, only_active: false }) || {}
62
+ const inactivePluginExcludes: RegExp[] = []
63
+ for (const fname of Object.keys(allfeature)) {
64
+ if (null != (feature as any)[fname]) continue
65
+ const groups = getModelPath(model, `main.${KIT}.feature.${fname}.plugin`,
66
+ { required: false, only_active: false }) || {}
67
+ for (const gname of Object.keys(groups)) {
68
+ for (const one of (groups[gname].path || [])) {
69
+ const pat = esc(String(one))
70
+ inactivePluginExcludes.push(new RegExp('(^|/)' +
71
+ pat.replace(/\\\/$/, '') + (/\/$/.test(String(one)) ? '/' : '$')))
72
+ }
73
+ }
74
+ }
75
+
36
76
  Package({ target })
37
77
 
38
78
  Gitignore({})
39
79
 
40
80
  // Copy tm/c files with replacements. The tm src/ subtree only stages the
41
81
  // per-feature custom-source dirs (target add), so it is excluded here.
82
+ //
83
+ // pluginExcludes: the generate-time plugin trim (an INACTIVE plugin
84
+ // group's declared files stay out of the tree - the model's `path`
85
+ // entries are target-root-relative, which is this Copy's root). c has
86
+ // `srcfeature: false`, so the per-feature Copy in cmp/Feature.ts - where
87
+ // pluginExcludesFor normally applies this trim - never runs for it, and
88
+ // this whole-tree Copy is the ONLY copy the target has: without the
89
+ // exclude an active secrets feature would ship every inactive kind, and
90
+ // the Makefile would compile and link them all (Main_go.ts precedent).
42
91
  Copy({
43
92
  from: 'tm/' + target.name,
44
- exclude: [/src\//],
93
+ exclude: [/src\//, ...pluginExcludes(model), ...inactivePluginExcludes],
45
94
  replace: {
46
95
  ...props.ctx$.stdrep,
47
96
  }
@@ -73,6 +122,12 @@ const Main = cmp(async function Main(props: any) {
73
122
  Config({ target })
74
123
  })
75
124
 
125
+ // feature/<name>/kinds.c — the plugin definitions an active plugin-bearing
126
+ // feature selected, and the Makefile's wiring gate for that feature's
127
+ // vendored payload (see Config_c). Nothing is emitted when no such
128
+ // feature is active.
129
+ FeaturePlugins({ target })
130
+
76
131
  // core/api.h — the per-API public header (entity constructors + accessors).
77
132
  EntityBase({ target })
78
133
 
@@ -5,8 +5,18 @@ import {
5
5
 
6
6
 
7
7
  // C has no package manifest — the build is driven by the template Makefile
8
- // (copied verbatim). Package is a no-op for the C target, kept so the Main
9
- // component can call it uniformly across targets.
8
+ // (tm/c/Makefile, copied verbatim). Package is a no-op for the C target,
9
+ // kept so the Main component can call it uniformly across targets.
10
+ //
11
+ // This is also why the secrets feature's build model is not emitted from
12
+ // here, unlike Package_rust's rustls dependency table or Package_swift's
13
+ // targets: the Makefile is feature-agnostic (a trimmed template tree must
14
+ // name no feature) and `-include`s a GENERATED feature/<name>/kinds.mk that
15
+ // Config_c emits only when the model activates the feature for this
16
+ // target - the vendored payload to compile, the suite to run, and the
17
+ // plugin layer with its OpenSSL and libcurl only when a plugin group is
18
+ // active. Nothing here has to restate the model's choice, so nothing here
19
+ // can drift from it.
10
20
  const Package = cmp(async function Package(_props: any) {
11
21
  // intentionally empty
12
22
  })