@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
@@ -0,0 +1,126 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/onepassword.lua)
2
+ -- Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
3
+ -- License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ -- The onepassword plugin: 1Password through a Connect server, over
5
+ -- HTTPS.
6
+ --
7
+ -- A port of typescript/plugins/onepassword.ts, which is canonical.
8
+
9
+ local err = require('feature.secrets.sekreto.err')
10
+ local name = require('feature.secrets.sekreto.name')
11
+ local addr = require('feature.secrets.sekreto.addr')
12
+ local providers = require('feature.secrets.sekreto.providers')
13
+ local json = require('feature.secrets.sekreto.plugins.json')
14
+ local httpjson = require('feature.secrets.sekreto.plugins.httpjson')
15
+ local support = require('feature.secrets.sekreto.plugins.support')
16
+
17
+ local fail = err.fail
18
+ local trimslash = providers.trimslash
19
+ local providerplugin = providers.providerplugin
20
+ local fetchjson = httpjson.fetchjson
21
+ local uriescape = support.uriescape
22
+
23
+ local M = {}
24
+
25
+ --- 1Password, through a Connect server.
26
+ ---
27
+ --- The item titled `api.token` (titles keep their dots), in the named
28
+ --- vault. The value is the field with purpose PASSWORD, or the field
29
+ --- labelled `value`. A vault that cannot be found is an error - config
30
+ --- names it, so its absence is a broken store, not a missing secret.
31
+ local function onepassword(useaddr, token, vault)
32
+ local vaultid = nil
33
+
34
+ local function auth()
35
+ return { { 'authorization', 'Bearer ' .. (token or '') } }
36
+ end
37
+
38
+ local function resolvevault(address)
39
+ local want = vault or ''
40
+ if '' == want then
41
+ fail('sekreto: onepassword: no vault')
42
+ end
43
+
44
+ local res = fetchjson('GET', address .. '/v1/vaults', auth())
45
+ local list = json.asarr(res.body)
46
+
47
+ if 200 ~= res.status or nil == list then
48
+ fail('sekreto: onepassword error: ' .. res.status .. ': listing vaults')
49
+ end
50
+
51
+ for _, entry in ipairs(list) do
52
+ local id = json.text(json.dig(entry, 'id'))
53
+ if want == id or want == json.text(json.dig(entry, 'name')) then
54
+ return id or ''
55
+ end
56
+ end
57
+
58
+ fail('sekreto: onepassword: no vault named ' .. want)
59
+ end
60
+
61
+ return {
62
+ lookup = function(secret)
63
+ name.checkname(secret)
64
+
65
+ local address = trimslash(useaddr or '')
66
+ if '' == address then
67
+ fail('sekreto: onepassword: no addr')
68
+ end
69
+ addr.checkaddr(address)
70
+
71
+ if nil == vaultid then
72
+ vaultid = resolvevault(address)
73
+ end
74
+
75
+ local filter = uriescape('title eq "' .. secret .. '"')
76
+ local found = fetchjson(
77
+ 'GET', address .. '/v1/vaults/' .. vaultid .. '/items?filter=' .. filter, auth()
78
+ )
79
+
80
+ local items = json.asarr(found.body)
81
+ if 200 ~= found.status or nil == items then
82
+ fail('sekreto: onepassword error: ' .. found.status .. ': finding ' .. secret)
83
+ end
84
+
85
+ if 0 == #items then
86
+ return nil
87
+ end
88
+
89
+ local item = fetchjson(
90
+ 'GET',
91
+ address .. '/v1/vaults/' .. vaultid .. '/items/' ..
92
+ (json.text(json.dig(items[1], 'id')) or ''),
93
+ auth()
94
+ )
95
+
96
+ if 200 ~= item.status then
97
+ fail('sekreto: onepassword error: ' .. item.status .. ': reading ' .. secret)
98
+ end
99
+
100
+ local fields = json.asarr(json.dig(item.body, 'fields')) or {}
101
+
102
+ for _, entry in ipairs(fields) do
103
+ if 'PASSWORD' == json.asstr(json.dig(entry, 'purpose')) then
104
+ return json.text(json.dig(entry, 'value'))
105
+ end
106
+ end
107
+ for _, entry in ipairs(fields) do
108
+ if 'value' == json.asstr(json.dig(entry, 'label')) then
109
+ return json.text(json.dig(entry, 'value'))
110
+ end
111
+ end
112
+
113
+ return nil
114
+ end,
115
+ describe = function()
116
+ return 'onepassword:' .. (vault or '')
117
+ end,
118
+ }
119
+ end
120
+
121
+ --- The kind, as a voxgig/plugin definition.
122
+ M.onepassword = providerplugin('onepassword', function(spec)
123
+ return onepassword(spec.addr, spec.token, spec.vault)
124
+ end)
125
+
126
+ return M
@@ -0,0 +1,93 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/secretspec.lua)
2
+ -- Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
3
+ -- License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ -- The secretspec plugin: SecretSpec, through its CLI. Needs a child
5
+ -- process, so it is not a built-in kind.
6
+ --
7
+ -- A port of typescript/plugins/secretspec.ts, which is canonical.
8
+
9
+ local err = require('feature.secrets.sekreto.err')
10
+ local name = require('feature.secrets.sekreto.name')
11
+ local providers = require('feature.secrets.sekreto.providers')
12
+ local support = require('feature.secrets.sekreto.plugins.support')
13
+ local net = require('feature.secrets.sekreto.plugins.net')
14
+
15
+ local fail = err.fail
16
+ local nonempty = providers.nonempty
17
+ local providerplugin = providers.providerplugin
18
+ local first = support.first
19
+ local stripnewline = support.stripnewline
20
+ local runcmd = net.runcmd
21
+
22
+ local M = {}
23
+
24
+ --- Does this SecretSpec failure mean "no such secret" rather than "I
25
+ --- could not answer"?
26
+ ---
27
+ --- MATCHED ON THE WHOLE PHRASE, NOT ON "not found". SecretSpec also says
28
+ --- `Provider backend 'keyring' not found`, which is a store that could
29
+ --- not answer at all - and reading that as a miss is the worst failure
30
+ --- this library has, because the chain then falls through to a weaker
31
+ --- store without saying so. The key is required to appear, so the two
32
+ --- cannot be confused.
33
+ function M.secretspecmiss(why, key)
34
+ return nil ~= why:find("Secret '" .. key .. "' not found", 1, true)
35
+ end
36
+
37
+ --- SecretSpec (https://secretspec.dev), read through its CLI.
38
+ ---
39
+ --- `backend` selects one of SecretSpec's own backends (`--provider`) and
40
+ --- is called `backend` here only because `provider` already means a
41
+ --- sekreto provider. A reason is required, not optional: SecretSpec
42
+ --- records every read in an audit log and refuses to read without one.
43
+ local function secretspec(command, file, profile, backend, reason, prefix)
44
+ local usecommand = nonempty(command) and command or 'secretspec'
45
+
46
+ return {
47
+ lookup = function(secret)
48
+ local key = name.envkey(secret, prefix)
49
+
50
+ local argv = { usecommand }
51
+ if nonempty(file) then
52
+ argv[#argv + 1] = '--file'
53
+ argv[#argv + 1] = file
54
+ end
55
+ argv[#argv + 1] = 'get'
56
+ argv[#argv + 1] = key
57
+ if nonempty(backend) then
58
+ argv[#argv + 1] = '--provider'
59
+ argv[#argv + 1] = backend
60
+ end
61
+ if nonempty(profile) then
62
+ argv[#argv + 1] = '--profile'
63
+ argv[#argv + 1] = profile
64
+ end
65
+ argv[#argv + 1] = '--reason'
66
+ argv[#argv + 1] = first(reason, 'sekreto')
67
+
68
+ local out, why, status = runcmd(argv, nil, usecommand)
69
+
70
+ if 0 == status then
71
+ return stripnewline(out)
72
+ end
73
+
74
+ if M.secretspecmiss(why, key) then
75
+ return nil
76
+ end
77
+
78
+ fail('sekreto: secretspec error: ' ..
79
+ (('' == why) and ('exit ' .. status) or why))
80
+ end,
81
+ describe = function()
82
+ return 'secretspec' .. (nonempty(backend) and (':' .. backend) or '')
83
+ end,
84
+ }
85
+ end
86
+
87
+ --- The kind, as a voxgig/plugin definition.
88
+ M.secretspec = providerplugin('secretspec', function(spec)
89
+ return secretspec(spec.command, spec.file, spec.profile, spec.backend,
90
+ spec.reason, spec.prefix)
91
+ end)
92
+
93
+ return M
@@ -0,0 +1,269 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/sigv4.lua)
2
+ -- Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
3
+ -- License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ -- AWS Signature Version 4, hand-rolled.
5
+ --
6
+ -- The AWS providers need exactly one thing from the AWS SDK - request
7
+ -- signing - and taking the SDK for it would break the no-dependency rule
8
+ -- that keeps every port honest. SigV4 is a stable, published algorithm
9
+ -- built from HMAC-SHA256, which src/sekreto/plugins/crypto.lua carries.
10
+ -- It moved out of the core with the aws plugin: the core of no port
11
+ -- imports a hash function (docs/design/plugin-providers.md).
12
+ --
13
+ -- `sigv4` is pure: the caller passes the timestamp, so the same input
14
+ -- yields the same signature everywhere. That is what lets the shared spec
15
+ -- carry known-answer cases that all ports must reproduce bit for bit, and
16
+ -- lets the integration mock recompute the signature server-side.
17
+ --
18
+ -- `uriescape` and `uridecode` live in support, because four plugins that
19
+ -- sign nothing need them and reaching them through here would put
20
+ -- SHA-256 and HMAC behind all four.
21
+ --
22
+ -- A port of typescript/plugins/sigv4.ts, which is canonical.
23
+
24
+ local crypto = require('feature.secrets.sekreto.plugins.crypto')
25
+ local support = require('feature.secrets.sekreto.plugins.support')
26
+
27
+ local M = {}
28
+
29
+ local uriescape = support.uriescape
30
+ local uridecode = support.uridecode
31
+
32
+ -- ASCII case folding, spelled out. `string.upper` and `string.lower` go
33
+ -- through the C library's toupper/tolower, which follow the machine's
34
+ -- locale - and in a Turkish locale `i` does not fold to `I`.
35
+ local function lowerascii(text)
36
+ return (text:gsub('[A-Z]', function(ch) return string.char(ch:byte() + 32) end))
37
+ end
38
+
39
+ local function upperascii(text)
40
+ return (text:gsub('[a-z]', function(ch) return string.char(ch:byte() - 32) end))
41
+ end
42
+
43
+ --- The canonical query string: each pair RFC 3986-escaped, sorted by
44
+ --- escaped key then escaped value. `?b=2&a=1` signs as `a=1&b=2`.
45
+ function M.canonicalquery(query)
46
+ if '' == query then
47
+ return ''
48
+ end
49
+
50
+ local pairlist = {}
51
+ local at = 1
52
+
53
+ while true do
54
+ local stop = query:find('&', at, true)
55
+ local piece = stop and query:sub(at, stop - 1) or query:sub(at)
56
+
57
+ local eq = piece:find('=', 1, true)
58
+ local key = eq and piece:sub(1, eq - 1) or piece
59
+ local value = eq and piece:sub(eq + 1) or ''
60
+
61
+ pairlist[#pairlist + 1] = {
62
+ uriescape(uridecode(key)),
63
+ uriescape(uridecode(value)),
64
+ }
65
+
66
+ if not stop then
67
+ break
68
+ end
69
+ at = stop + 1
70
+ end
71
+
72
+ table.sort(pairlist, function(left, right)
73
+ if left[1] ~= right[1] then
74
+ return left[1] < right[1]
75
+ end
76
+ return left[2] < right[2]
77
+ end)
78
+
79
+ local parts = {}
80
+ for index, pair in ipairs(pairlist) do
81
+ parts[index] = pair[1] .. '=' .. pair[2]
82
+ end
83
+
84
+ return table.concat(parts, '&')
85
+ end
86
+
87
+ --- Split a URL the way the WHATWG `host` property does, by hand.
88
+ ---
89
+ --- No platform URL type is trusted here: the signature covers `host`, and
90
+ --- a parser that keeps an explicitly written `:443`, or that leaves
91
+ --- userinfo in, signs something the server will not agree with.
92
+ local function spliturl(url)
93
+ local mark = url:find('://', 1, true)
94
+ local scheme = mark and lowerascii(url:sub(1, mark - 1)) or ''
95
+ local rest = mark and url:sub(mark + 3) or url
96
+
97
+ local stop = rest:find('[/?#]')
98
+ local authority = stop and rest:sub(1, stop - 1) or rest
99
+ local tail = stop and rest:sub(stop) or ''
100
+
101
+ -- Userinfo is stripped: it is never part of the signed host.
102
+ local at = authority:find('@[^@]*$')
103
+ if at then
104
+ authority = authority:sub(at + 1)
105
+ end
106
+
107
+ local host = authority
108
+ local port = ''
109
+
110
+ if '[' == host:sub(1, 1) then
111
+ local close = host:find(']', 1, true)
112
+ if close then
113
+ local after = host:sub(close + 1)
114
+ host = host:sub(1, close)
115
+ if ':' == after:sub(1, 1) then
116
+ port = after:sub(2)
117
+ end
118
+ end
119
+ else
120
+ local colon = host:find(':', 1, true)
121
+ if colon then
122
+ port = host:sub(colon + 1)
123
+ host = host:sub(1, colon - 1)
124
+ end
125
+ end
126
+
127
+ host = lowerascii(host)
128
+
129
+ -- A default port is not written: `Host: x:443` is not what was signed.
130
+ if ('https' == scheme and '443' == port) or ('http' == scheme and '80' == port) then
131
+ port = ''
132
+ end
133
+
134
+ local path = tail
135
+ local query = ''
136
+
137
+ local mark2 = tail:find('?', 1, true)
138
+ if mark2 then
139
+ path = tail:sub(1, mark2 - 1)
140
+ query = tail:sub(mark2 + 1)
141
+ local hash = query:find('#', 1, true)
142
+ if hash then
143
+ query = query:sub(1, hash - 1)
144
+ end
145
+ else
146
+ local hash = tail:find('#', 1, true)
147
+ if hash then
148
+ path = tail:sub(1, hash - 1)
149
+ end
150
+ end
151
+
152
+ if '' == path then
153
+ path = '/'
154
+ end
155
+
156
+ return {
157
+ scheme = scheme,
158
+ host = host,
159
+ port = port,
160
+ hostheader = ('' == port) and host or (host .. ':' .. port),
161
+ path = path,
162
+ query = query,
163
+ }
164
+ end
165
+
166
+ M.spliturl = spliturl
167
+
168
+ --- Trim, then collapse every internal run of spaces and tabs to one
169
+ --- space: AWS folds sequential whitespace before signing, so a header
170
+ --- value `a b\tc` must sign as `a b c`.
171
+ local function foldvalue(text)
172
+ local trimmed = text:gsub('^[ \t\r\n]+', ''):gsub('[ \t\r\n]+$', '')
173
+ return (trimmed:gsub('[ \t\r\n]+', ' '))
174
+ end
175
+
176
+ --- Sign one request.
177
+ ---
178
+ --- `input` is a table whose field names are the spec's JSON keys verbatim:
179
+ --- method, url, service, region, keyid, secret, datetime, headers, body,
180
+ --- session.
181
+ ---
182
+ --- Returns an ORDERED list of {name, value} pairs: authorization,
183
+ --- x-amz-date, and x-amz-security-token only when a session was given.
184
+ --- The order is contract - callers print it field by field.
185
+ function M.sigv4(input)
186
+ local url = spliturl(input.url or '')
187
+
188
+ local datetime = input.datetime or ''
189
+ local date = datetime:sub(1, 8)
190
+ local session = input.session
191
+ if nil ~= session and '' == session then
192
+ session = nil
193
+ end
194
+
195
+ -- The caller's headers first, then host / x-amz-date / the session
196
+ -- token AFTER them, so those always win.
197
+ local headers = {}
198
+ local names = {}
199
+
200
+ local function put(name, value)
201
+ if nil == headers[name] then
202
+ names[#names + 1] = name
203
+ end
204
+ headers[name] = value
205
+ end
206
+
207
+ for _, pair in ipairs(input.headers or {}) do
208
+ put(lowerascii(pair[1]), foldvalue(pair[2]))
209
+ end
210
+
211
+ put('host', url.hostheader)
212
+ put('x-amz-date', datetime)
213
+ if nil ~= session then
214
+ put('x-amz-security-token', session)
215
+ end
216
+
217
+ table.sort(names)
218
+
219
+ local canonparts = {}
220
+ for index, name in ipairs(names) do
221
+ canonparts[index] = name .. ':' .. headers[name] .. '\n'
222
+ end
223
+
224
+ local canonicalheaders = table.concat(canonparts)
225
+ local signedheaders = table.concat(names, ';')
226
+
227
+ local canonicalrequest = table.concat({
228
+ upperascii(input.method or ''),
229
+ url.path,
230
+ M.canonicalquery(url.query),
231
+ canonicalheaders,
232
+ signedheaders,
233
+ crypto.sha256hex(input.body or ''),
234
+ }, '\n')
235
+
236
+ local scope = date .. '/' .. (input.region or '') .. '/' ..
237
+ (input.service or '') .. '/aws4_request'
238
+
239
+ local stringtosign = table.concat({
240
+ 'AWS4-HMAC-SHA256',
241
+ datetime,
242
+ scope,
243
+ crypto.sha256hex(canonicalrequest),
244
+ }, '\n')
245
+
246
+ local kdate = crypto.hmac('AWS4' .. (input.secret or ''), date)
247
+ local kregion = crypto.hmac(kdate, input.region or '')
248
+ local kservice = crypto.hmac(kregion, input.service or '')
249
+ local ksigning = crypto.hmac(kservice, 'aws4_request')
250
+ local signature = crypto.hex(crypto.hmac(ksigning, stringtosign))
251
+
252
+ local out = {
253
+ {
254
+ 'authorization',
255
+ 'AWS4-HMAC-SHA256 Credential=' .. (input.keyid or '') .. '/' .. scope ..
256
+ ', SignedHeaders=' .. signedheaders ..
257
+ ', Signature=' .. signature,
258
+ },
259
+ { 'x-amz-date', datetime },
260
+ }
261
+
262
+ if nil ~= session then
263
+ out[#out + 1] = { 'x-amz-security-token', session }
264
+ end
265
+
266
+ return out
267
+ end
268
+
269
+ return M
@@ -0,0 +1,146 @@
1
+ -- VENDORED: @voxgig/sekreto sdk-20260908-1556-0 (lua/src/sekreto/plugins/support.lua)
2
+ -- Source: https://github.com/voxgig/sekreto @ 1267ee2e5f49566bc92695bc9eb3a60ef4924998 [tag: sdk-20260908-1556-0]
3
+ -- License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ -- The pure helpers every store client shares, and nothing else.
5
+ --
6
+ -- This module REQUIRES NOTHING - no socket, no digest, no child process,
7
+ -- not even another sekreto module - so a plugin that needs only these
8
+ -- gets only these. secretspec and the boru CLI path both do: they want
9
+ -- `first` and `stripnewline` and no HTTP at all, and reaching those
10
+ -- through httpjson would put the whole HTTP/1.1 framing behind two kinds
11
+ -- that never open a socket.
12
+ --
13
+ -- It lives under plugins/ rather than in the core because only the ten
14
+ -- plugin kinds use any of it. The core's four built-ins read at most a
15
+ -- local file and need none of it.
16
+ --
17
+ -- The equivalents in the canonical port are spread across
18
+ -- typescript/plugins/httpjson.ts and typescript/plugins/support.ts; the
19
+ -- split into a separate module here is lua's, for the reason above.
20
+
21
+ local M = {}
22
+
23
+ --- The first candidate that is set and non-empty, or empty.
24
+ ---
25
+ --- Walked with `select`, never with `ipairs` over a packed table: a nil
26
+ --- argument leaves a hole, and `ipairs` stops dead at the first one - so
27
+ --- `first(nil, os.getenv('AWS_ACCESS_KEY_ID'))` would answer empty with
28
+ --- the variable plainly set.
29
+ function M.first(...)
30
+ local count = select('#', ...)
31
+
32
+ for index = 1, count do
33
+ local candidate = select(index, ...)
34
+ if nil ~= candidate and '' ~= candidate then
35
+ return candidate
36
+ end
37
+ end
38
+
39
+ return ''
40
+ end
41
+
42
+ --- One trailing newline removed. A CLI prints the secret and a newline;
43
+ --- the newline is never part of the secret on purpose.
44
+ function M.stripnewline(text)
45
+ if '\n' == text:sub(-1) then
46
+ return text:sub(1, #text - 1)
47
+ end
48
+ return text
49
+ end
50
+
51
+ --- Never renewed: a configured token does not expire.
52
+ M.NEVER = math.maxinteger
53
+
54
+ --- Milliseconds since the epoch, near enough for token renewal.
55
+ function M.nowms()
56
+ return os.time() * 1000
57
+ end
58
+
59
+ --- When a logged-in token must be renewed, from its expiry in seconds (a
60
+ --- JSON number, or a string as Azure IMDS sends it): now + max(seconds -
61
+ --- 60, 1). A missing or zero expiry means never renew.
62
+ function M.renewtime(expires)
63
+ local seconds = 0
64
+
65
+ if 'number' == type(expires) then
66
+ seconds = expires
67
+ elseif 'string' == type(expires) then
68
+ seconds = tonumber(expires) or 0
69
+ end
70
+
71
+ if seconds ~= seconds or 0 >= seconds then
72
+ return M.NEVER
73
+ end
74
+
75
+ return M.nowms() + math.floor(math.max(seconds - 60, 1) * 1000)
76
+ end
77
+
78
+ --- The `YYYYMMDDTHHMMSSZ` timestamp SigV4 wants, for now.
79
+ function M.awsnow()
80
+ return os.date('!%Y%m%dT%H%M%SZ')
81
+ end
82
+
83
+ -- --------------------------------------------- percent-encoding
84
+ --
85
+ -- Here rather than with sigv4 because four plugins that sign nothing need
86
+ -- `uriescape` - azure, 1password, doppler and infisical - and reaching it
87
+ -- through sigv4 would put SHA-256 and HMAC behind all four. Moved
88
+ -- verbatim from what was src/sekreto/sigv4.lua: the sigv4 corpus group
89
+ -- is a known-answer test, so the bytes these two produce are pinned.
90
+
91
+ --- RFC 3986 escaping, which is stricter than the usual URL encoder: AWS
92
+ --- wants everything but the unreserved set escaped, with uppercase hex.
93
+ --- `!'()*` are escaped here and are not by JavaScript's own encoder.
94
+ function M.uriescape(text)
95
+ local out = {}
96
+
97
+ for index = 1, #text do
98
+ local byte = text:byte(index)
99
+ local ch = text:sub(index, index)
100
+
101
+ if (65 <= byte and 90 >= byte) or
102
+ (97 <= byte and 122 >= byte) or
103
+ (48 <= byte and 57 >= byte) or
104
+ 45 == byte or 95 == byte or 46 == byte or 126 == byte
105
+ then
106
+ out[#out + 1] = ch
107
+ else
108
+ out[#out + 1] = string.format('%%%02X', byte)
109
+ end
110
+ end
111
+
112
+ return table.concat(out)
113
+ end
114
+
115
+ local HEX = '0123456789abcdefABCDEF'
116
+
117
+ --- Percent-decode, and nothing else: `+` stays `+`, as on the wire, and a
118
+ --- malformed escape is kept literal.
119
+ function M.uridecode(text)
120
+ local out = {}
121
+ local index = 1
122
+
123
+ while index <= #text do
124
+ local ch = text:sub(index, index)
125
+
126
+ if '%' == ch and index + 2 <= #text then
127
+ local digits = text:sub(index + 1, index + 2)
128
+ if nil ~= HEX:find(digits:sub(1, 1), 1, true) and
129
+ nil ~= HEX:find(digits:sub(2, 2), 1, true)
130
+ then
131
+ out[#out + 1] = string.char(tonumber(digits, 16))
132
+ index = index + 3
133
+ goto continue
134
+ end
135
+ end
136
+
137
+ out[#out + 1] = ch
138
+ index = index + 1
139
+
140
+ ::continue::
141
+ end
142
+
143
+ return table.concat(out)
144
+ end
145
+
146
+ return M