@voxgig/sdkgen 4.34.0 → 4.34.1

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 (1055) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/copies.d.ts +4 -3
  3. package/dist/action/copies.js +142 -45
  4. package/dist/action/copies.js.map +1 -1
  5. package/dist/action/doctor.d.ts +1 -0
  6. package/dist/action/doctor.js +6 -2
  7. package/dist/action/doctor.js.map +1 -1
  8. package/dist/action/package.d.ts +3 -1
  9. package/dist/action/package.js +12 -5
  10. package/dist/action/package.js.map +1 -1
  11. package/dist/action/resolve.d.ts +11 -2
  12. package/dist/action/resolve.js +27 -0
  13. package/dist/action/resolve.js.map +1 -1
  14. package/dist/admin/npm-trust.js +7 -7
  15. package/dist/admin/npm-trust.js.map +1 -1
  16. package/dist/cmp/AgentGuide.js +4 -3
  17. package/dist/cmp/AgentGuide.js.map +1 -1
  18. package/dist/cmp/AgentGuideFeature.js +3 -2
  19. package/dist/cmp/AgentGuideFeature.js.map +1 -1
  20. package/dist/cmp/AgentGuideTop.js +2 -1
  21. package/dist/cmp/AgentGuideTop.js.map +1 -1
  22. package/dist/cmp/Changelog.js +2 -1
  23. package/dist/cmp/Changelog.js.map +1 -1
  24. package/dist/cmp/Deploy.js +2 -1
  25. package/dist/cmp/Deploy.js.map +1 -1
  26. package/dist/cmp/Entity.js +2 -2
  27. package/dist/cmp/Entity.js.map +1 -1
  28. package/dist/cmp/ExternalTarget.js +2 -1
  29. package/dist/cmp/ExternalTarget.js.map +1 -1
  30. package/dist/cmp/Feature.js +2 -1
  31. package/dist/cmp/Feature.js.map +1 -1
  32. package/dist/cmp/FeatureHook.js +2 -1
  33. package/dist/cmp/FeatureHook.js.map +1 -1
  34. package/dist/cmp/License.js +6 -4
  35. package/dist/cmp/License.js.map +1 -1
  36. package/dist/cmp/Main.js +2 -2
  37. package/dist/cmp/Main.js.map +1 -1
  38. package/dist/cmp/PublishWorkflow.js +2 -1
  39. package/dist/cmp/PublishWorkflow.js.map +1 -1
  40. package/dist/cmp/Readme.js +2 -1
  41. package/dist/cmp/Readme.js.map +1 -1
  42. package/dist/cmp/ReadmeEntity.js +4 -4
  43. package/dist/cmp/ReadmeEntity.js.map +1 -1
  44. package/dist/cmp/ReadmeErrors.js +6 -4
  45. package/dist/cmp/ReadmeErrors.js.map +1 -1
  46. package/dist/cmp/ReadmeExplanation.js +4 -3
  47. package/dist/cmp/ReadmeExplanation.js.map +1 -1
  48. package/dist/cmp/ReadmeFeatures.js +4 -3
  49. package/dist/cmp/ReadmeFeatures.js.map +1 -1
  50. package/dist/cmp/ReadmeHowto.js +4 -3
  51. package/dist/cmp/ReadmeHowto.js.map +1 -1
  52. package/dist/cmp/ReadmeInstall.js +4 -3
  53. package/dist/cmp/ReadmeInstall.js.map +1 -1
  54. package/dist/cmp/ReadmeIntro.js +4 -4
  55. package/dist/cmp/ReadmeIntro.js.map +1 -1
  56. package/dist/cmp/ReadmeModel.js +6 -3
  57. package/dist/cmp/ReadmeModel.js.map +1 -1
  58. package/dist/cmp/ReadmeOptions.js +4 -4
  59. package/dist/cmp/ReadmeOptions.js.map +1 -1
  60. package/dist/cmp/ReadmeQuick.js +4 -3
  61. package/dist/cmp/ReadmeQuick.js.map +1 -1
  62. package/dist/cmp/ReadmeRef.js +4 -4
  63. package/dist/cmp/ReadmeRef.js.map +1 -1
  64. package/dist/cmp/ReadmeRefFeatures.js +2 -1
  65. package/dist/cmp/ReadmeRefFeatures.js.map +1 -1
  66. package/dist/cmp/ReadmeStation.js +2 -1
  67. package/dist/cmp/ReadmeStation.js.map +1 -1
  68. package/dist/cmp/ReadmeTop.js +104 -35
  69. package/dist/cmp/ReadmeTop.js.map +1 -1
  70. package/dist/cmp/ReadmeUnions.js +2 -1
  71. package/dist/cmp/ReadmeUnions.js.map +1 -1
  72. package/dist/cmp/Registered.js +4 -3
  73. package/dist/cmp/Registered.js.map +1 -1
  74. package/dist/cmp/Security.js +10 -6
  75. package/dist/cmp/Security.js.map +1 -1
  76. package/dist/cmp/Test.js +2 -1
  77. package/dist/cmp/Test.js.map +1 -1
  78. package/dist/cmp/TestControl.js +2 -1
  79. package/dist/cmp/TestControl.js.map +1 -1
  80. package/dist/helpers/component.d.ts +4 -0
  81. package/dist/helpers/component.js +54 -0
  82. package/dist/helpers/component.js.map +1 -0
  83. package/dist/helpers/definition.js +2 -2
  84. package/dist/helpers/definition.js.map +1 -1
  85. package/dist/helpers/definitionPlan.d.ts +16 -0
  86. package/dist/helpers/definitionPlan.js +116 -12
  87. package/dist/helpers/definitionPlan.js.map +1 -1
  88. package/dist/helpers/featureSource.d.ts +2 -1
  89. package/dist/helpers/featureSource.js +44 -2
  90. package/dist/helpers/featureSource.js.map +1 -1
  91. package/dist/helpers/flowGuard.d.ts +8 -0
  92. package/dist/helpers/flowGuard.js +84 -0
  93. package/dist/helpers/flowGuard.js.map +1 -0
  94. package/dist/helpers/generated.d.ts +26 -0
  95. package/dist/helpers/generated.js +363 -0
  96. package/dist/helpers/generated.js.map +1 -0
  97. package/dist/helpers/mcpTools.d.ts +11 -0
  98. package/dist/helpers/mcpTools.js +28 -0
  99. package/dist/helpers/mcpTools.js.map +1 -0
  100. package/dist/helpers/media.d.ts +9 -0
  101. package/dist/helpers/media.js +61 -0
  102. package/dist/helpers/media.js.map +1 -0
  103. package/dist/helpers/modelNames.js +147 -14
  104. package/dist/helpers/modelNames.js.map +1 -1
  105. package/dist/helpers/naming.d.ts +11 -1
  106. package/dist/helpers/naming.js +143 -0
  107. package/dist/helpers/naming.js.map +1 -1
  108. package/dist/helpers/npm.d.ts +13 -0
  109. package/dist/helpers/npm.js +41 -0
  110. package/dist/helpers/npm.js.map +1 -0
  111. package/dist/helpers/npmScripts.d.ts +4 -0
  112. package/dist/helpers/npmScripts.js +30 -0
  113. package/dist/helpers/npmScripts.js.map +1 -0
  114. package/dist/helpers/opExample.d.ts +5 -4
  115. package/dist/helpers/opExample.js +10 -7
  116. package/dist/helpers/opExample.js.map +1 -1
  117. package/dist/helpers/opShape.d.ts +20 -4
  118. package/dist/helpers/opShape.js +197 -30
  119. package/dist/helpers/opShape.js.map +1 -1
  120. package/dist/helpers/optional.d.ts +20 -0
  121. package/dist/helpers/optional.js +51 -0
  122. package/dist/helpers/optional.js.map +1 -0
  123. package/dist/helpers/packageMeta.d.ts +9 -1
  124. package/dist/helpers/packageMeta.js +70 -11
  125. package/dist/helpers/packageMeta.js.map +1 -1
  126. package/dist/helpers/stdrep.js +3 -0
  127. package/dist/helpers/stdrep.js.map +1 -1
  128. package/dist/helpers/testPolicy.d.ts +9 -1
  129. package/dist/helpers/testPolicy.js +48 -0
  130. package/dist/helpers/testPolicy.js.map +1 -1
  131. package/dist/helpers/text.d.ts +2 -0
  132. package/dist/helpers/text.js +27 -0
  133. package/dist/helpers/text.js.map +1 -0
  134. package/dist/sdkgen.d.ts +15 -8
  135. package/dist/sdkgen.js +79 -12
  136. package/dist/sdkgen.js.map +1 -1
  137. package/dist/testkit.js +2 -1
  138. package/dist/testkit.js.map +1 -1
  139. package/dist/tsconfig.tsbuildinfo +1 -1
  140. package/dist/utility.d.ts +2 -1
  141. package/dist/utility.js +33 -18
  142. package/dist/utility.js.map +1 -1
  143. package/model/sdkgen.aontu +24 -1
  144. package/package.json +8 -2
  145. package/project/.sdk/model/feature/timeout.aontu +2 -0
  146. package/project/.sdk/model/target/go-mcp.aontu +2 -0
  147. package/project/.sdk/src/cmp/c/Config_c.ts +5 -0
  148. package/project/.sdk/src/cmp/c/EntityTypes_c.ts +1 -1
  149. package/project/.sdk/src/cmp/c/Entity_c.ts +1 -1
  150. package/project/.sdk/src/cmp/c/Main_c.ts +4 -20
  151. package/project/.sdk/src/cmp/c/PrepareAuth_c.ts +169 -51
  152. package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +22 -13
  153. package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +10 -5
  154. package/project/.sdk/src/cmp/c/ReadmeInstall_c.ts +2 -2
  155. package/project/.sdk/src/cmp/c/ReadmeIntro_c.ts +3 -3
  156. package/project/.sdk/src/cmp/c/ReadmeModel_c.ts +11 -10
  157. package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +37 -20
  158. package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +39 -21
  159. package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +9 -7
  160. package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +15 -4
  161. package/project/.sdk/src/cmp/c/TestClean_c.ts +56 -22
  162. package/project/.sdk/src/cmp/c/TestDirect_c.ts +2 -2
  163. package/project/.sdk/src/cmp/c/TestEntity_c.ts +77 -4
  164. package/project/.sdk/src/cmp/c/fragment/Entity.fragment.c +33 -27
  165. package/project/.sdk/src/cmp/c/fragment/EntityPatchOp.fragment.c +36 -0
  166. package/project/.sdk/src/cmp/c/fragment/Main.fragment.c +40 -7
  167. package/project/.sdk/src/cmp/clojure/Entity_clojure.ts +1 -1
  168. package/project/.sdk/src/cmp/clojure/Main_clojure.ts +3 -1
  169. package/project/.sdk/src/cmp/clojure/PrepareAuth_clojure.ts +44 -28
  170. package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +7 -4
  171. package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +1 -1
  172. package/project/.sdk/src/cmp/clojure/ReadmeInstall_clojure.ts +3 -3
  173. package/project/.sdk/src/cmp/clojure/ReadmeIntro_clojure.ts +3 -3
  174. package/project/.sdk/src/cmp/clojure/ReadmeModel_clojure.ts +7 -5
  175. package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +12 -4
  176. package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +24 -7
  177. package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +2 -2
  178. package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +1 -1
  179. package/project/.sdk/src/cmp/clojure/TestClean_clojure.ts +53 -23
  180. package/project/.sdk/src/cmp/clojure/TestEntity_clojure.ts +64 -5
  181. package/project/.sdk/src/cmp/clojure/fragment/Entity.fragment.clj +22 -11
  182. package/project/.sdk/src/cmp/clojure/fragment/EntityListOp.fragment.clj +7 -9
  183. package/project/.sdk/src/cmp/clojure/fragment/EntityPatchOp.fragment.clj +15 -0
  184. package/project/.sdk/src/cmp/cpp/EntityTypes_cpp.ts +1 -1
  185. package/project/.sdk/src/cmp/cpp/Entity_cpp.ts +2 -2
  186. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +3 -19
  187. package/project/.sdk/src/cmp/cpp/PrepareAuth_cpp.ts +38 -39
  188. package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +19 -12
  189. package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +11 -6
  190. package/project/.sdk/src/cmp/cpp/ReadmeInstall_cpp.ts +2 -2
  191. package/project/.sdk/src/cmp/cpp/ReadmeIntro_cpp.ts +3 -3
  192. package/project/.sdk/src/cmp/cpp/ReadmeModel_cpp.ts +10 -9
  193. package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +26 -18
  194. package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +42 -25
  195. package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +7 -7
  196. package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +11 -4
  197. package/project/.sdk/src/cmp/cpp/TestClean_cpp.ts +69 -21
  198. package/project/.sdk/src/cmp/cpp/TestEntity_cpp.ts +135 -6
  199. package/project/.sdk/src/cmp/cpp/fragment/Entity.fragment.cpp +2 -0
  200. package/project/.sdk/src/cmp/cpp/fragment/EntityPatchOp.fragment.cpp +28 -0
  201. package/project/.sdk/src/cmp/csharp/EntityTypes_csharp.ts +1 -1
  202. package/project/.sdk/src/cmp/csharp/Entity_csharp.ts +1 -1
  203. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +3 -1
  204. package/project/.sdk/src/cmp/csharp/Package_csharp.ts +4 -1
  205. package/project/.sdk/src/cmp/csharp/PrepareAuth_csharp.ts +69 -23
  206. package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +7 -4
  207. package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +3 -3
  208. package/project/.sdk/src/cmp/csharp/ReadmeInstall_csharp.ts +3 -3
  209. package/project/.sdk/src/cmp/csharp/ReadmeIntro_csharp.ts +3 -3
  210. package/project/.sdk/src/cmp/csharp/ReadmeModel_csharp.ts +11 -9
  211. package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +17 -6
  212. package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +33 -16
  213. package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +1 -1
  214. package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +1 -1
  215. package/project/.sdk/src/cmp/csharp/TestClean_csharp.ts +67 -14
  216. package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +43 -31
  217. package/project/.sdk/src/cmp/csharp/TestEntity_csharp.ts +187 -15
  218. package/project/.sdk/src/cmp/csharp/fragment/Entity.fragment.cs +2 -0
  219. package/project/.sdk/src/cmp/csharp/fragment/EntityBase.fragment.cs +11 -2
  220. package/project/.sdk/src/cmp/csharp/fragment/EntityPatchOp.fragment.cs +41 -0
  221. package/project/.sdk/src/cmp/csharp/fragment/Main.fragment.cs +28 -4
  222. package/project/.sdk/src/cmp/csharp/utility_csharp.ts +6 -0
  223. package/project/.sdk/src/cmp/elixir/EntityOperation_elixir.ts +5 -0
  224. package/project/.sdk/src/cmp/elixir/EntityTypes_elixir.ts +3 -3
  225. package/project/.sdk/src/cmp/elixir/Entity_elixir.ts +22 -1
  226. package/project/.sdk/src/cmp/elixir/MainEntity_elixir.ts +4 -2
  227. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +6 -2
  228. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +7 -0
  229. package/project/.sdk/src/cmp/elixir/PrepareAuth_elixir.ts +40 -30
  230. package/project/.sdk/src/cmp/elixir/ReadmeEntity_elixir.ts +13 -9
  231. package/project/.sdk/src/cmp/elixir/ReadmeHowto_elixir.ts +6 -5
  232. package/project/.sdk/src/cmp/elixir/ReadmeInstall_elixir.ts +2 -2
  233. package/project/.sdk/src/cmp/elixir/ReadmeIntro_elixir.ts +4 -4
  234. package/project/.sdk/src/cmp/elixir/ReadmeModel_elixir.ts +13 -11
  235. package/project/.sdk/src/cmp/elixir/ReadmeQuick_elixir.ts +25 -12
  236. package/project/.sdk/src/cmp/elixir/ReadmeRef_elixir.ts +29 -13
  237. package/project/.sdk/src/cmp/elixir/ReadmeTopQuick_elixir.ts +5 -4
  238. package/project/.sdk/src/cmp/elixir/ReadmeTopTest_elixir.ts +5 -4
  239. package/project/.sdk/src/cmp/elixir/TestClean_elixir.ts +41 -12
  240. package/project/.sdk/src/cmp/elixir/TestEntity_elixir.ts +152 -23
  241. package/project/.sdk/src/cmp/elixir/fragment/Entity.fragment.ex +4 -4
  242. package/project/.sdk/src/cmp/elixir/fragment/EntityPatchOp.fragment.ex +35 -0
  243. package/project/.sdk/src/cmp/elixir/fragment/Main.fragment.ex +29 -5
  244. package/project/.sdk/src/cmp/elixir/fragment/Pipeline.fragment.ex +23 -16
  245. package/project/.sdk/src/cmp/go/EntityTypes_go.ts +1 -1
  246. package/project/.sdk/src/cmp/go/Entity_go.ts +1 -1
  247. package/project/.sdk/src/cmp/go/Main_go.ts +5 -6
  248. package/project/.sdk/src/cmp/go/PrepareAuth_go.ts +40 -26
  249. package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +1 -0
  250. package/project/.sdk/src/cmp/go/ReadmeExamplesTest_go.ts +6 -1
  251. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +1 -1
  252. package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +3 -3
  253. package/project/.sdk/src/cmp/go/ReadmeIntro_go.ts +3 -3
  254. package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +3 -2
  255. package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +14 -0
  256. package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +29 -7
  257. package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +1 -1
  258. package/project/.sdk/src/cmp/go/TestClean_go.ts +81 -18
  259. package/project/.sdk/src/cmp/go/TestDirect_go.ts +47 -53
  260. package/project/.sdk/src/cmp/go/TestEntity_go.ts +204 -24
  261. package/project/.sdk/src/cmp/go/fragment/Entity.fragment.go +79 -60
  262. package/project/.sdk/src/cmp/go/fragment/EntityPatchOp.fragment.go +49 -0
  263. package/project/.sdk/src/cmp/go/fragment/Main.fragment.go +26 -5
  264. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +8 -10
  265. package/project/.sdk/src/cmp/go-mcp/Main_go-mcp.ts +240 -121
  266. package/project/.sdk/src/cmp/go-mcp/fragment/main.fragment.go +1 -1
  267. package/project/.sdk/src/cmp/go-mcp/fragment/tools.fragment.go +34 -27
  268. package/project/.sdk/src/cmp/java/EntityTypes_java.ts +1 -1
  269. package/project/.sdk/src/cmp/java/Entity_java.ts +1 -1
  270. package/project/.sdk/src/cmp/java/Main_java.ts +3 -1
  271. package/project/.sdk/src/cmp/java/PrepareAuth_java.ts +58 -23
  272. package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +7 -4
  273. package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +1 -1
  274. package/project/.sdk/src/cmp/java/ReadmeInstall_java.ts +3 -3
  275. package/project/.sdk/src/cmp/java/ReadmeIntro_java.ts +3 -3
  276. package/project/.sdk/src/cmp/java/ReadmeModel_java.ts +2 -1
  277. package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +10 -1
  278. package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +22 -5
  279. package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +1 -1
  280. package/project/.sdk/src/cmp/java/TestClean_java.ts +57 -12
  281. package/project/.sdk/src/cmp/java/TestDirect_java.ts +50 -36
  282. package/project/.sdk/src/cmp/java/TestEntity_java.ts +180 -13
  283. package/project/.sdk/src/cmp/java/fragment/Entity.fragment.java +2 -0
  284. package/project/.sdk/src/cmp/java/fragment/EntityBase.fragment.java +5 -3
  285. package/project/.sdk/src/cmp/java/fragment/EntityPatchOp.fragment.java +45 -0
  286. package/project/.sdk/src/cmp/js/EntityTypes_js.ts +1 -1
  287. package/project/.sdk/src/cmp/js/Entity_js.ts +1 -1
  288. package/project/.sdk/src/cmp/js/Main_js.ts +2 -0
  289. package/project/.sdk/src/cmp/js/Package_js.ts +11 -8
  290. package/project/.sdk/src/cmp/js/PrepareAuth_js.ts +39 -27
  291. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +7 -4
  292. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +0 -3
  293. package/project/.sdk/src/cmp/js/ReadmeInstall_js.ts +3 -3
  294. package/project/.sdk/src/cmp/js/ReadmeIntro_js.ts +3 -3
  295. package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +4 -3
  296. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +17 -0
  297. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +37 -8
  298. package/project/.sdk/src/cmp/js/ReadmeTopHowto_js.ts +2 -3
  299. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +1 -1
  300. package/project/.sdk/src/cmp/js/TestClean_js.ts +52 -8
  301. package/project/.sdk/src/cmp/js/TestDirect_js.ts +81 -54
  302. package/project/.sdk/src/cmp/js/TestEntity_js.ts +95 -2
  303. package/project/.sdk/src/cmp/js/TestLive_js.ts +4 -3
  304. package/project/.sdk/src/cmp/js/fragment/Direct.test.fragment.js +4 -0
  305. package/project/.sdk/src/cmp/js/fragment/Entity.fragment.js +2 -0
  306. package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +2 -0
  307. package/project/.sdk/src/cmp/js/fragment/EntityBase.fragment.js +51 -25
  308. package/project/.sdk/src/cmp/js/fragment/EntityPatchOp.fragment.js +129 -0
  309. package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +39 -15
  310. package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +4 -0
  311. package/project/.sdk/src/cmp/kotlin/EntityTypes_kotlin.ts +1 -1
  312. package/project/.sdk/src/cmp/kotlin/Entity_kotlin.ts +1 -1
  313. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +3 -1
  314. package/project/.sdk/src/cmp/kotlin/PrepareAuth_kotlin.ts +56 -31
  315. package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +7 -4
  316. package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +1 -1
  317. package/project/.sdk/src/cmp/kotlin/ReadmeInstall_kotlin.ts +3 -3
  318. package/project/.sdk/src/cmp/kotlin/ReadmeIntro_kotlin.ts +3 -3
  319. package/project/.sdk/src/cmp/kotlin/ReadmeModel_kotlin.ts +2 -1
  320. package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +10 -1
  321. package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +22 -5
  322. package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +1 -1
  323. package/project/.sdk/src/cmp/kotlin/TestClean_kotlin.ts +45 -10
  324. package/project/.sdk/src/cmp/kotlin/TestDirect_kotlin.ts +49 -26
  325. package/project/.sdk/src/cmp/kotlin/TestEntity_kotlin.ts +168 -10
  326. package/project/.sdk/src/cmp/kotlin/fragment/Entity.fragment.kt +2 -0
  327. package/project/.sdk/src/cmp/kotlin/fragment/EntityBase.fragment.kt +2 -1
  328. package/project/.sdk/src/cmp/kotlin/fragment/EntityPatchOp.fragment.kt +40 -0
  329. package/project/.sdk/src/cmp/lua/EntityTypes_lua.ts +1 -1
  330. package/project/.sdk/src/cmp/lua/Entity_lua.ts +1 -1
  331. package/project/.sdk/src/cmp/lua/Main_lua.ts +2 -1
  332. package/project/.sdk/src/cmp/lua/PrepareAuth_lua.ts +42 -23
  333. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +7 -4
  334. package/project/.sdk/src/cmp/lua/ReadmeExamplesTest_lua.ts +8 -2
  335. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +1 -1
  336. package/project/.sdk/src/cmp/lua/ReadmeInstall_lua.ts +2 -2
  337. package/project/.sdk/src/cmp/lua/ReadmeIntro_lua.ts +3 -3
  338. package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +3 -2
  339. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +9 -1
  340. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +22 -6
  341. package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +1 -1
  342. package/project/.sdk/src/cmp/lua/TestClean_lua.ts +46 -12
  343. package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +100 -124
  344. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +173 -20
  345. package/project/.sdk/src/cmp/lua/fragment/Entity.fragment.lua +85 -48
  346. package/project/.sdk/src/cmp/lua/fragment/EntityPatchOp.fragment.lua +34 -0
  347. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +28 -6
  348. package/project/.sdk/src/cmp/ocaml/EntityOperation_ocaml.ts +8 -11
  349. package/project/.sdk/src/cmp/ocaml/Entity_ocaml.ts +8 -3
  350. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +2 -1
  351. package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +7 -5
  352. package/project/.sdk/src/cmp/ocaml/PrepareAuth_ocaml.ts +39 -34
  353. package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +7 -4
  354. package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +3 -8
  355. package/project/.sdk/src/cmp/ocaml/ReadmeInstall_ocaml.ts +2 -2
  356. package/project/.sdk/src/cmp/ocaml/ReadmeIntro_ocaml.ts +3 -3
  357. package/project/.sdk/src/cmp/ocaml/ReadmeModel_ocaml.ts +2 -1
  358. package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +9 -1
  359. package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +22 -6
  360. package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +3 -7
  361. package/project/.sdk/src/cmp/ocaml/TestClean_ocaml.ts +47 -14
  362. package/project/.sdk/src/cmp/ocaml/TestEntity_ocaml.ts +88 -3
  363. package/project/.sdk/src/cmp/ocaml/fragment/RunOp.fragment.ml +10 -11
  364. package/project/.sdk/src/cmp/ocaml/utility_ocaml.ts +7 -0
  365. package/project/.sdk/src/cmp/perl/Entity_perl.ts +1 -1
  366. package/project/.sdk/src/cmp/perl/Main_perl.ts +3 -1
  367. package/project/.sdk/src/cmp/perl/Package_perl.ts +5 -4
  368. package/project/.sdk/src/cmp/perl/PrepareAuth_perl.ts +48 -33
  369. package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +9 -4
  370. package/project/.sdk/src/cmp/perl/ReadmeExamplesTest_perl.ts +2 -2
  371. package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +1 -1
  372. package/project/.sdk/src/cmp/perl/ReadmeInstall_perl.ts +9 -3
  373. package/project/.sdk/src/cmp/perl/ReadmeIntro_perl.ts +3 -3
  374. package/project/.sdk/src/cmp/perl/ReadmeModel_perl.ts +7 -5
  375. package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +12 -4
  376. package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +26 -9
  377. package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +2 -2
  378. package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +1 -1
  379. package/project/.sdk/src/cmp/perl/TestClean_perl.ts +42 -11
  380. package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +121 -149
  381. package/project/.sdk/src/cmp/perl/TestEntity_perl.ts +178 -17
  382. package/project/.sdk/src/cmp/perl/fragment/Entity.fragment.pm +16 -2
  383. package/project/.sdk/src/cmp/perl/fragment/EntityListOp.fragment.pm +2 -13
  384. package/project/.sdk/src/cmp/perl/fragment/EntityPatchOp.fragment.pm +32 -0
  385. package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +23 -5
  386. package/project/.sdk/src/cmp/perl/utility_perl.ts +16 -0
  387. package/project/.sdk/src/cmp/php/EntityTypes_php.ts +3 -3
  388. package/project/.sdk/src/cmp/php/Entity_php.ts +4 -3
  389. package/project/.sdk/src/cmp/php/MainEntity_php.ts +1 -1
  390. package/project/.sdk/src/cmp/php/Main_php.ts +3 -1
  391. package/project/.sdk/src/cmp/php/Package_php.ts +1 -1
  392. package/project/.sdk/src/cmp/php/PrepareAuth_php.ts +36 -28
  393. package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +7 -4
  394. package/project/.sdk/src/cmp/php/ReadmeExamplesTest_php.ts +3 -3
  395. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +1 -1
  396. package/project/.sdk/src/cmp/php/ReadmeInstall_php.ts +2 -2
  397. package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +3 -3
  398. package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +2 -1
  399. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +9 -1
  400. package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +23 -6
  401. package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +1 -1
  402. package/project/.sdk/src/cmp/php/TestClean_php.ts +73 -12
  403. package/project/.sdk/src/cmp/php/TestDirect_php.ts +95 -127
  404. package/project/.sdk/src/cmp/php/TestEntity_php.ts +219 -20
  405. package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +82 -45
  406. package/project/.sdk/src/cmp/php/fragment/EntityPatchOp.fragment.php +38 -0
  407. package/project/.sdk/src/cmp/php/fragment/Main.fragment.php +26 -5
  408. package/project/.sdk/src/cmp/py/EntityTypes_py.ts +1 -1
  409. package/project/.sdk/src/cmp/py/Entity_py.ts +2 -2
  410. package/project/.sdk/src/cmp/py/Main_py.ts +6 -2
  411. package/project/.sdk/src/cmp/py/Package_py.ts +7 -0
  412. package/project/.sdk/src/cmp/py/PrepareAuth_py.ts +52 -26
  413. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +7 -4
  414. package/project/.sdk/src/cmp/py/ReadmeExamplesTest_py.ts +12 -6
  415. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +1 -1
  416. package/project/.sdk/src/cmp/py/ReadmeInstall_py.ts +3 -3
  417. package/project/.sdk/src/cmp/py/ReadmeIntro_py.ts +3 -3
  418. package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +2 -1
  419. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +9 -1
  420. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +23 -6
  421. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +1 -1
  422. package/project/.sdk/src/cmp/py/TestClean_py.ts +41 -10
  423. package/project/.sdk/src/cmp/py/TestDirect_py.ts +91 -121
  424. package/project/.sdk/src/cmp/py/TestEntity_py.ts +146 -20
  425. package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +62 -42
  426. package/project/.sdk/src/cmp/py/fragment/EntityPatchOp.fragment.py +27 -0
  427. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +23 -5
  428. package/project/.sdk/src/cmp/py-data/Main_py-data.ts +1 -1
  429. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +3 -3
  430. package/project/.sdk/src/cmp/rb/Entity_rb.ts +1 -1
  431. package/project/.sdk/src/cmp/rb/Main_rb.ts +5 -6
  432. package/project/.sdk/src/cmp/rb/Package_rb.ts +3 -1
  433. package/project/.sdk/src/cmp/rb/PrepareAuth_rb.ts +30 -28
  434. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +9 -5
  435. package/project/.sdk/src/cmp/rb/ReadmeExamplesTest_rb.ts +16 -8
  436. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +1 -1
  437. package/project/.sdk/src/cmp/rb/ReadmeInstall_rb.ts +2 -2
  438. package/project/.sdk/src/cmp/rb/ReadmeIntro_rb.ts +3 -3
  439. package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +3 -2
  440. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +14 -5
  441. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +26 -8
  442. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
  443. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +1 -1
  444. package/project/.sdk/src/cmp/rb/TestClean_rb.ts +36 -10
  445. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +95 -126
  446. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +177 -21
  447. package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +49 -29
  448. package/project/.sdk/src/cmp/rb/fragment/EntityListOp.fragment.rb +2 -11
  449. package/project/.sdk/src/cmp/rb/fragment/EntityPatchOp.fragment.rb +31 -0
  450. package/project/.sdk/src/cmp/rb/fragment/Main.fragment.rb +19 -5
  451. package/project/.sdk/src/cmp/rust/EntityTypes_rust.ts +1 -1
  452. package/project/.sdk/src/cmp/rust/Entity_rust.ts +2 -2
  453. package/project/.sdk/src/cmp/rust/Main_rust.ts +7 -6
  454. package/project/.sdk/src/cmp/rust/PrepareAuth_rust.ts +56 -29
  455. package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +16 -9
  456. package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +11 -4
  457. package/project/.sdk/src/cmp/rust/ReadmeInstall_rust.ts +3 -3
  458. package/project/.sdk/src/cmp/rust/ReadmeIntro_rust.ts +3 -3
  459. package/project/.sdk/src/cmp/rust/ReadmeModel_rust.ts +12 -9
  460. package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +25 -17
  461. package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +35 -21
  462. package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +6 -8
  463. package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +13 -5
  464. package/project/.sdk/src/cmp/rust/TestClean_rust.ts +80 -21
  465. package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +124 -79
  466. package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +164 -17
  467. package/project/.sdk/src/cmp/rust/fragment/Entity.fragment.rs +44 -23
  468. package/project/.sdk/src/cmp/rust/fragment/EntityPatchOp.fragment.rs +41 -0
  469. package/project/.sdk/src/cmp/rust/fragment/Main.fragment.rs +39 -9
  470. package/project/.sdk/src/cmp/scala/Config_scala.ts +4 -0
  471. package/project/.sdk/src/cmp/scala/EntityTypes_scala.ts +1 -1
  472. package/project/.sdk/src/cmp/scala/Entity_scala.ts +1 -1
  473. package/project/.sdk/src/cmp/scala/Main_scala.ts +4 -20
  474. package/project/.sdk/src/cmp/scala/PrepareAuth_scala.ts +56 -24
  475. package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +7 -4
  476. package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +1 -1
  477. package/project/.sdk/src/cmp/scala/ReadmeInstall_scala.ts +3 -3
  478. package/project/.sdk/src/cmp/scala/ReadmeIntro_scala.ts +3 -3
  479. package/project/.sdk/src/cmp/scala/ReadmeModel_scala.ts +2 -1
  480. package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +10 -1
  481. package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +22 -5
  482. package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +1 -1
  483. package/project/.sdk/src/cmp/scala/TestClean_scala.ts +39 -10
  484. package/project/.sdk/src/cmp/scala/TestEntity_scala.ts +113 -3
  485. package/project/.sdk/src/cmp/scala/fragment/Entity.fragment.scala +2 -0
  486. package/project/.sdk/src/cmp/scala/fragment/EntityBase.fragment.scala +4 -2
  487. package/project/.sdk/src/cmp/scala/fragment/EntityPatchOp.fragment.scala +33 -0
  488. package/project/.sdk/src/cmp/swift/EntityTypes_swift.ts +3 -3
  489. package/project/.sdk/src/cmp/swift/Entity_swift.ts +1 -1
  490. package/project/.sdk/src/cmp/swift/Main_swift.ts +6 -2
  491. package/project/.sdk/src/cmp/swift/PrepareAuth_swift.ts +56 -29
  492. package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +7 -4
  493. package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +1 -1
  494. package/project/.sdk/src/cmp/swift/ReadmeInstall_swift.ts +3 -3
  495. package/project/.sdk/src/cmp/swift/ReadmeIntro_swift.ts +3 -3
  496. package/project/.sdk/src/cmp/swift/ReadmeModel_swift.ts +2 -1
  497. package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +10 -1
  498. package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +21 -5
  499. package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +1 -1
  500. package/project/.sdk/src/cmp/swift/TestClean_swift.ts +44 -10
  501. package/project/.sdk/src/cmp/swift/TestEntity_swift.ts +90 -2
  502. package/project/.sdk/src/cmp/swift/fragment/Entity.fragment.swift +2 -0
  503. package/project/.sdk/src/cmp/swift/fragment/EntityBase.fragment.swift +9 -1
  504. package/project/.sdk/src/cmp/swift/fragment/EntityPatchOp.fragment.swift +24 -0
  505. package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +23 -3
  506. package/project/.sdk/src/cmp/ts/EntityTypes_ts.ts +9 -3
  507. package/project/.sdk/src/cmp/ts/Entity_ts.ts +5 -5
  508. package/project/.sdk/src/cmp/ts/Main_ts.ts +4 -3
  509. package/project/.sdk/src/cmp/ts/Package_ts.ts +18 -10
  510. package/project/.sdk/src/cmp/ts/PrepareAuth_ts.ts +37 -28
  511. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +7 -4
  512. package/project/.sdk/src/cmp/ts/ReadmeExamplesTest_ts.ts +39 -21
  513. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +0 -3
  514. package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +3 -3
  515. package/project/.sdk/src/cmp/ts/ReadmeIntro_ts.ts +3 -3
  516. package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +4 -3
  517. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +10 -1
  518. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +37 -8
  519. package/project/.sdk/src/cmp/ts/ReadmeTopHowto_ts.ts +2 -3
  520. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +1 -1
  521. package/project/.sdk/src/cmp/ts/TestClean_ts.ts +52 -8
  522. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +50 -109
  523. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +92 -2
  524. package/project/.sdk/src/cmp/ts/TestLive_ts.ts +4 -3
  525. package/project/.sdk/src/cmp/ts/fragment/Direct.test.fragment.ts +3 -0
  526. package/project/.sdk/src/cmp/ts/fragment/Entity.fragment.ts +2 -0
  527. package/project/.sdk/src/cmp/ts/fragment/Entity.test.fragment.ts +3 -1
  528. package/project/.sdk/src/cmp/ts/fragment/EntityBase.fragment.ts +49 -24
  529. package/project/.sdk/src/cmp/ts/fragment/EntityPatchOp.fragment.ts +126 -0
  530. package/project/.sdk/src/cmp/ts/fragment/Main.fragment.ts +50 -18
  531. package/project/.sdk/src/cmp/zig/Entity_zig.ts +2 -2
  532. package/project/.sdk/src/cmp/zig/Main_zig.ts +5 -22
  533. package/project/.sdk/src/cmp/zig/Package_zig.ts +11 -2
  534. package/project/.sdk/src/cmp/zig/PrepareAuth_zig.ts +57 -31
  535. package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +17 -9
  536. package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +14 -4
  537. package/project/.sdk/src/cmp/zig/ReadmeInstall_zig.ts +2 -2
  538. package/project/.sdk/src/cmp/zig/ReadmeIntro_zig.ts +3 -3
  539. package/project/.sdk/src/cmp/zig/ReadmeModel_zig.ts +12 -10
  540. package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +29 -12
  541. package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +45 -22
  542. package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +8 -4
  543. package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +10 -3
  544. package/project/.sdk/src/cmp/zig/TestClean_zig.ts +67 -28
  545. package/project/.sdk/src/cmp/zig/TestEntity_zig.ts +54 -5
  546. package/project/.sdk/src/cmp/zig/Test_zig.ts +1 -0
  547. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +44 -34
  548. package/project/.sdk/src/cmp/zig/fragment/EntityPatchOp.fragment.zig +26 -0
  549. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +30 -6
  550. package/project/.sdk/src/cmp/zig/fragment/Root.fragment.zig +1 -0
  551. package/project/.sdk/tm/c/LICENSE +1 -1
  552. package/project/.sdk/tm/c/core/context.c +2 -1
  553. package/project/.sdk/tm/c/core/helpers.c +21 -0
  554. package/project/.sdk/tm/c/core/response.c +103 -0
  555. package/project/.sdk/tm/c/core/sdk.h +26 -0
  556. package/project/.sdk/tm/c/core/spec.c +10 -0
  557. package/project/.sdk/tm/c/feature/test.c +46 -2
  558. package/project/.sdk/tm/c/feature/validate.c +2 -0
  559. package/project/.sdk/tm/c/tests/feature_harness.h +1 -1
  560. package/project/.sdk/tm/c/tests/primary_utility_test.c +9 -5
  561. package/project/.sdk/tm/c/tests/server_variable_test.c +80 -0
  562. package/project/.sdk/tm/c/utility/make_fetch_def.c +5 -1
  563. package/project/.sdk/tm/c/utility/make_options.c +84 -6
  564. package/project/.sdk/tm/c/utility/make_point.c +100 -8
  565. package/project/.sdk/tm/c/utility/make_spec.c +17 -1
  566. package/project/.sdk/tm/c/utility/make_url.c +38 -1
  567. package/project/.sdk/tm/c/utility/media.c +107 -0
  568. package/project/.sdk/tm/c/utility/param.c +52 -28
  569. package/project/.sdk/tm/c/utility/prepare_body.c +1 -0
  570. package/project/.sdk/tm/c/utility/prepare_headers.c +199 -29
  571. package/project/.sdk/tm/c/utility/prepare_query.c +24 -2
  572. package/project/.sdk/tm/c/utility/result_body.c +4 -0
  573. package/project/.sdk/tm/c/utility/transform_request.c +54 -17
  574. package/project/.sdk/tm/clojure/LICENSE +1 -1
  575. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +0 -3
  576. package/project/.sdk/tm/clojure/src/sdk/client.clj +19 -5
  577. package/project/.sdk/tm/clojure/src/sdk/core.clj +415 -117
  578. package/project/.sdk/tm/clojure/src/sdk/features.clj +44 -20
  579. package/project/.sdk/tm/clojure/test/sdk/test/feature.clj +21 -1
  580. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +10 -2
  581. package/project/.sdk/tm/cpp/LICENSE +1 -1
  582. package/project/.sdk/tm/cpp/core/types.hpp +131 -7
  583. package/project/.sdk/tm/cpp/feature/test.hpp +32 -2
  584. package/project/.sdk/tm/cpp/feature/timeout.hpp +29 -9
  585. package/project/.sdk/tm/cpp/feature/validate.hpp +2 -0
  586. package/project/.sdk/tm/cpp/test/feature_test.cpp +37 -0
  587. package/project/.sdk/tm/cpp/test/harness.hpp +1 -1
  588. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +6 -2
  589. package/project/.sdk/tm/cpp/test/server_variable_test.cpp +57 -0
  590. package/project/.sdk/tm/cpp/utility/cookie.hpp +36 -0
  591. package/project/.sdk/tm/cpp/utility/pipeline.hpp +441 -82
  592. package/project/.sdk/tm/csharp/LICENSE +1 -1
  593. package/project/.sdk/tm/csharp/core/Context.cs +1 -1
  594. package/project/.sdk/tm/csharp/core/Helpers.cs +17 -0
  595. package/project/.sdk/tm/csharp/core/Response.cs +75 -0
  596. package/project/.sdk/tm/csharp/core/Spec.cs +3 -0
  597. package/project/.sdk/tm/csharp/feature/TestFeature.cs +41 -3
  598. package/project/.sdk/tm/csharp/feature/TimeoutFeature.cs +31 -3
  599. package/project/.sdk/tm/csharp/feature/ValidateFeature.cs +2 -0
  600. package/project/.sdk/tm/csharp/test/FeatureHarness.cs +1 -1
  601. package/project/.sdk/tm/csharp/test/FeatureTest.cs +35 -0
  602. package/project/.sdk/tm/csharp/test/PipelineTest.cs +28 -0
  603. package/project/.sdk/tm/csharp/test/Runner.cs +119 -0
  604. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +8 -3
  605. package/project/.sdk/tm/csharp/utility/Fetcher.cs +25 -7
  606. package/project/.sdk/tm/csharp/utility/MakeFetchDef.cs +1 -5
  607. package/project/.sdk/tm/csharp/utility/MakeOptions.cs +8 -6
  608. package/project/.sdk/tm/csharp/utility/MakePoint.cs +68 -17
  609. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +24 -6
  610. package/project/.sdk/tm/csharp/utility/MakeUrl.cs +21 -1
  611. package/project/.sdk/tm/csharp/utility/Media.cs +124 -0
  612. package/project/.sdk/tm/csharp/utility/Param.cs +57 -20
  613. package/project/.sdk/tm/csharp/utility/PrepareBody.cs +4 -0
  614. package/project/.sdk/tm/csharp/utility/PrepareHeaders.cs +103 -24
  615. package/project/.sdk/tm/csharp/utility/PrepareQuery.cs +33 -3
  616. package/project/.sdk/tm/csharp/utility/ResultBody.cs +5 -0
  617. package/project/.sdk/tm/csharp/utility/TransformRequest.cs +21 -13
  618. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +3 -2
  619. package/project/.sdk/tm/elixir/LICENSE +1 -1
  620. package/project/.sdk/tm/elixir/lib/projectname/context.ex +1 -1
  621. package/project/.sdk/tm/elixir/lib/projectname/core.ex +7 -2
  622. package/project/.sdk/tm/elixir/lib/projectname/entity_base.ex +43 -12
  623. package/project/.sdk/tm/elixir/lib/projectname/feature/test.ex +47 -21
  624. package/project/.sdk/tm/elixir/lib/projectname/feature/validate.ex +2 -0
  625. package/project/.sdk/tm/elixir/lib/projectname/utility.ex +482 -129
  626. package/project/.sdk/tm/elixir/test/support/feature_harness.ex +1 -0
  627. package/project/.sdk/tm/go/LICENSE +1 -1
  628. package/project/.sdk/tm/go/core/context.go +1 -1
  629. package/project/.sdk/tm/go/core/helpers.go +19 -1
  630. package/project/.sdk/tm/go/core/response.go +72 -0
  631. package/project/.sdk/tm/go/core/spec.go +3 -0
  632. package/project/.sdk/tm/go/core/types.go +9 -1
  633. package/project/.sdk/tm/go/feature/test_feature.go +44 -3
  634. package/project/.sdk/tm/go/feature/timeout_feature.go +39 -22
  635. package/project/.sdk/tm/go/feature/validate_feature.go +2 -0
  636. package/project/.sdk/tm/go/test/feature_corpus_test.go +45 -1
  637. package/project/.sdk/tm/go/test/feature_harness_test.go +1 -1
  638. package/project/.sdk/tm/go/test/feature_test.go +86 -0
  639. package/project/.sdk/tm/go/test/primary_utility_test.go +37 -1
  640. package/project/.sdk/tm/go/test/testsupport_test.go +106 -0
  641. package/project/.sdk/tm/go/utility/fetcher.go +20 -6
  642. package/project/.sdk/tm/go/utility/make_fetch_def.go +1 -7
  643. package/project/.sdk/tm/go/utility/make_options.go +12 -6
  644. package/project/.sdk/tm/go/utility/make_point.go +52 -3
  645. package/project/.sdk/tm/go/utility/make_spec.go +23 -3
  646. package/project/.sdk/tm/go/utility/make_url.go +23 -1
  647. package/project/.sdk/tm/go/utility/media.go +111 -0
  648. package/project/.sdk/tm/go/utility/param.go +61 -20
  649. package/project/.sdk/tm/go/utility/prepare_body.go +3 -0
  650. package/project/.sdk/tm/go/utility/prepare_headers.go +108 -22
  651. package/project/.sdk/tm/go/utility/prepare_query.go +25 -2
  652. package/project/.sdk/tm/go/utility/result_body.go +8 -0
  653. package/project/.sdk/tm/go/utility/transform_request.go +20 -9
  654. package/project/.sdk/tm/java/LICENSE +1 -1
  655. package/project/.sdk/tm/java/core/Context.java +1 -1
  656. package/project/.sdk/tm/java/core/Helpers.java +13 -0
  657. package/project/.sdk/tm/java/core/Response.java +61 -0
  658. package/project/.sdk/tm/java/core/SdkClient.java +21 -3
  659. package/project/.sdk/tm/java/core/SdkEntity.java +2 -0
  660. package/project/.sdk/tm/java/core/Spec.java +4 -0
  661. package/project/.sdk/tm/java/feature/TestFeature.java +46 -3
  662. package/project/.sdk/tm/java/feature/TimeoutFeature.java +51 -18
  663. package/project/.sdk/tm/java/feature/ValidateFeature.java +2 -0
  664. package/project/.sdk/tm/java/test/FeatureCorpusTest.java +93 -35
  665. package/project/.sdk/tm/java/test/FeatureHarness.java +1 -0
  666. package/project/.sdk/tm/java/test/FeatureTest.java +33 -0
  667. package/project/.sdk/tm/java/test/PipelineTest.java +4 -1
  668. package/project/.sdk/tm/java/test/RunnerSupport.java +97 -0
  669. package/project/.sdk/tm/java/utility/Clean.java +17 -7
  670. package/project/.sdk/tm/java/utility/Fetcher.java +27 -3
  671. package/project/.sdk/tm/java/utility/MakeFetchDef.java +1 -7
  672. package/project/.sdk/tm/java/utility/MakePoint.java +62 -10
  673. package/project/.sdk/tm/java/utility/MakeSpec.java +26 -1
  674. package/project/.sdk/tm/java/utility/MakeUrl.java +23 -1
  675. package/project/.sdk/tm/java/utility/Media.java +117 -0
  676. package/project/.sdk/tm/java/utility/Param.java +59 -20
  677. package/project/.sdk/tm/java/utility/PrepareBody.java +3 -0
  678. package/project/.sdk/tm/java/utility/PrepareHeaders.java +76 -18
  679. package/project/.sdk/tm/java/utility/PrepareMethod.java +2 -1
  680. package/project/.sdk/tm/java/utility/PrepareQuery.java +26 -2
  681. package/project/.sdk/tm/java/utility/ResultBody.java +5 -0
  682. package/project/.sdk/tm/java/utility/TransformRequest.java +24 -11
  683. package/project/.sdk/tm/js/LICENSE +1 -1
  684. package/project/.sdk/tm/js/src/Context.js +1 -1
  685. package/project/.sdk/tm/js/src/Control.js +1 -0
  686. package/project/.sdk/tm/js/src/Response.js +10 -1
  687. package/project/.sdk/tm/js/src/Spec.js +3 -0
  688. package/project/.sdk/tm/js/src/feature/base/BaseFeature.js +28 -0
  689. package/project/.sdk/tm/js/src/feature/netsim/NetsimFeature.js +10 -8
  690. package/project/.sdk/tm/js/src/feature/ratelimit/RatelimitFeature.js +8 -6
  691. package/project/.sdk/tm/js/src/feature/retry/RetryFeature.js +17 -4
  692. package/project/.sdk/tm/js/src/feature/test/TestFeature.js +40 -12
  693. package/project/.sdk/tm/js/src/feature/timeout/TimeoutFeature.js +17 -3
  694. package/project/.sdk/tm/js/src/feature/validate/ValidateFeature.js +2 -0
  695. package/project/.sdk/tm/js/src/utility/CleanUtility.js +25 -1
  696. package/project/.sdk/tm/js/src/utility/FetcherUtility.js +23 -1
  697. package/project/.sdk/tm/js/src/utility/MakeErrorUtility.js +2 -2
  698. package/project/.sdk/tm/js/src/utility/MakeFetchDefUtility.js +14 -2
  699. package/project/.sdk/tm/js/src/utility/MakeOptionsUtility.js +6 -6
  700. package/project/.sdk/tm/js/src/utility/MakePointUtility.js +39 -2
  701. package/project/.sdk/tm/js/src/utility/MakeRequestUtility.js +27 -2
  702. package/project/.sdk/tm/js/src/utility/MakeResponseUtility.js +2 -1
  703. package/project/.sdk/tm/js/src/utility/MakeSpecUtility.js +14 -1
  704. package/project/.sdk/tm/js/src/utility/MakeUrlUtility.js +23 -0
  705. package/project/.sdk/tm/js/src/utility/MediaUtility.js +145 -0
  706. package/project/.sdk/tm/js/src/utility/ParamUtility.js +46 -18
  707. package/project/.sdk/tm/js/src/utility/PrepareBodyUtility.js +6 -0
  708. package/project/.sdk/tm/js/src/utility/PrepareHeadersUtility.js +55 -14
  709. package/project/.sdk/tm/js/src/utility/PrepareMethodUtility.js +9 -0
  710. package/project/.sdk/tm/js/src/utility/PrepareQueryUtility.js +23 -6
  711. package/project/.sdk/tm/js/src/utility/ResultBodyUtility.js +60 -3
  712. package/project/.sdk/tm/js/src/utility/TransformRequestUtility.js +16 -7
  713. package/project/.sdk/tm/js/test/definition-runner.js +103 -3
  714. package/project/.sdk/tm/js/test/feature/Corpus.test.js +47 -16
  715. package/project/.sdk/tm/js/test/feature/harness.js +4 -1
  716. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +7 -7
  717. package/project/.sdk/tm/js/test/feature.test.js +134 -0
  718. package/project/.sdk/tm/js/test/live-contract.js +73 -3
  719. package/project/.sdk/tm/js/test/live-entity.js +34 -15
  720. package/project/.sdk/tm/js/test/live-runner.js +52 -7
  721. package/project/.sdk/tm/js/test/live-scenarios.js +4 -4
  722. package/project/.sdk/tm/js/test/pipeline.test.js +52 -1
  723. package/project/.sdk/tm/js/test/utility.js +30 -4
  724. package/project/.sdk/tm/kotlin/LICENSE +1 -1
  725. package/project/.sdk/tm/kotlin/core/Context.kt +1 -1
  726. package/project/.sdk/tm/kotlin/core/Helpers.kt +8 -0
  727. package/project/.sdk/tm/kotlin/core/Interfaces.kt +2 -0
  728. package/project/.sdk/tm/kotlin/core/Response.kt +65 -0
  729. package/project/.sdk/tm/kotlin/core/SdkClient.kt +20 -3
  730. package/project/.sdk/tm/kotlin/core/Spec.kt +3 -0
  731. package/project/.sdk/tm/kotlin/feature/TestFeature.kt +23 -3
  732. package/project/.sdk/tm/kotlin/feature/TimeoutFeature.kt +42 -15
  733. package/project/.sdk/tm/kotlin/feature/ValidateFeature.kt +2 -0
  734. package/project/.sdk/tm/kotlin/test/FeatureHarness.kt +1 -1
  735. package/project/.sdk/tm/kotlin/test/FeatureTest.kt +32 -0
  736. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +90 -0
  737. package/project/.sdk/tm/kotlin/test/ServerVariableTest.kt +50 -0
  738. package/project/.sdk/tm/kotlin/utility/CoreUtil.kt +9 -7
  739. package/project/.sdk/tm/kotlin/utility/Fetcher.kt +24 -4
  740. package/project/.sdk/tm/kotlin/utility/MakeOptions.kt +26 -0
  741. package/project/.sdk/tm/kotlin/utility/MakePoint.kt +57 -12
  742. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +26 -7
  743. package/project/.sdk/tm/kotlin/utility/Media.kt +83 -0
  744. package/project/.sdk/tm/kotlin/utility/Prepare.kt +127 -48
  745. package/project/.sdk/tm/kotlin/utility/ResultTransform.kt +18 -7
  746. package/project/.sdk/tm/lua/LICENSE +1 -1
  747. package/project/.sdk/tm/lua/core/context.lua +1 -1
  748. package/project/.sdk/tm/lua/core/helpers.lua +103 -0
  749. package/project/.sdk/tm/lua/core/response.lua +3 -0
  750. package/project/.sdk/tm/lua/core/spec.lua +3 -0
  751. package/project/.sdk/tm/lua/feature/test_feature.lua +36 -3
  752. package/project/.sdk/tm/lua/feature/validate_feature.lua +2 -0
  753. package/project/.sdk/tm/lua/test/feature_test.lua +1 -1
  754. package/project/.sdk/tm/lua/test/runner.lua +107 -0
  755. package/project/.sdk/tm/lua/utility/fetcher.lua +9 -2
  756. package/project/.sdk/tm/lua/utility/make_fetch_def.lua +2 -6
  757. package/project/.sdk/tm/lua/utility/make_options.lua +10 -7
  758. package/project/.sdk/tm/lua/utility/make_point.lua +65 -12
  759. package/project/.sdk/tm/lua/utility/make_spec.lua +19 -4
  760. package/project/.sdk/tm/lua/utility/make_url.lua +22 -1
  761. package/project/.sdk/tm/lua/utility/media.lua +106 -0
  762. package/project/.sdk/tm/lua/utility/param.lua +5 -45
  763. package/project/.sdk/tm/lua/utility/prepare_body.lua +5 -0
  764. package/project/.sdk/tm/lua/utility/prepare_headers.lua +71 -21
  765. package/project/.sdk/tm/lua/utility/prepare_query.lua +28 -6
  766. package/project/.sdk/tm/lua/utility/result_body.lua +7 -0
  767. package/project/.sdk/tm/lua/utility/transform_request.lua +23 -10
  768. package/project/.sdk/tm/lua/utility/unreadable_body.lua +70 -0
  769. package/project/.sdk/tm/ocaml/LICENSE +1 -1
  770. package/project/.sdk/tm/ocaml/sdk_features.ml +56 -10
  771. package/project/.sdk/tm/ocaml/sdk_helpers.ml +9 -0
  772. package/project/.sdk/tm/ocaml/sdk_runtime.ml +359 -85
  773. package/project/.sdk/tm/ocaml/sdk_types.ml +6 -0
  774. package/project/.sdk/tm/ocaml/test/harness.ml +1 -1
  775. package/project/.sdk/tm/ocaml/test/t_pipeline.ml +2 -1
  776. package/project/.sdk/tm/perl/LICENSE +1 -1
  777. package/project/.sdk/tm/perl/core/context.pm +1 -1
  778. package/project/.sdk/tm/perl/core/response.pm +2 -0
  779. package/project/.sdk/tm/perl/core/spec.pm +3 -0
  780. package/project/.sdk/tm/perl/feature/test_feature.pm +26 -3
  781. package/project/.sdk/tm/perl/feature/validate_feature.pm +2 -0
  782. package/project/.sdk/tm/perl/t/feature.t +1 -1
  783. package/project/.sdk/tm/perl/t/feature_corpus.t +72 -33
  784. package/project/.sdk/tm/perl/t/runner.pm +86 -0
  785. package/project/.sdk/tm/perl/t/server_variables.t +39 -0
  786. package/project/.sdk/tm/perl/utility/clean.pm +12 -7
  787. package/project/.sdk/tm/perl/utility/fetcher.pm +32 -19
  788. package/project/.sdk/tm/perl/utility/make_fetch_def.pm +4 -4
  789. package/project/.sdk/tm/perl/utility/make_options.pm +24 -0
  790. package/project/.sdk/tm/perl/utility/make_point.pm +55 -9
  791. package/project/.sdk/tm/perl/utility/make_spec.pm +27 -3
  792. package/project/.sdk/tm/perl/utility/make_url.pm +13 -1
  793. package/project/.sdk/tm/perl/utility/media.pm +109 -0
  794. package/project/.sdk/tm/perl/utility/param.pm +50 -24
  795. package/project/.sdk/tm/perl/utility/prepare_body.pm +11 -3
  796. package/project/.sdk/tm/perl/utility/prepare_headers.pm +63 -16
  797. package/project/.sdk/tm/perl/utility/prepare_method.pm +13 -0
  798. package/project/.sdk/tm/perl/utility/prepare_query.pm +18 -4
  799. package/project/.sdk/tm/perl/utility/result_body.pm +60 -0
  800. package/project/.sdk/tm/perl/utility/transform_request.pm +23 -8
  801. package/project/.sdk/tm/php/LICENSE +1 -1
  802. package/project/.sdk/tm/php/core/Context.php +1 -1
  803. package/project/.sdk/tm/php/core/Response.php +3 -0
  804. package/project/.sdk/tm/php/core/Spec.php +4 -0
  805. package/project/.sdk/tm/php/feature/CostFeature.php +2 -7
  806. package/project/.sdk/tm/php/feature/TestFeature.php +33 -3
  807. package/project/.sdk/tm/php/feature/ValidateFeature.php +14 -12
  808. package/project/.sdk/tm/php/test/FeatureCorpusTest.php +90 -35
  809. package/project/.sdk/tm/php/test/FeatureTest.php +4 -5
  810. package/project/.sdk/tm/php/test/PipelineTest.php +18 -1
  811. package/project/.sdk/tm/php/test/Runner.php +86 -0
  812. package/project/.sdk/tm/php/utility/Clean.php +10 -5
  813. package/project/.sdk/tm/php/utility/Fetcher.php +48 -6
  814. package/project/.sdk/tm/php/utility/MakeFetchDef.php +2 -1
  815. package/project/.sdk/tm/php/utility/MakePoint.php +55 -11
  816. package/project/.sdk/tm/php/utility/MakeSpec.php +21 -4
  817. package/project/.sdk/tm/php/utility/MakeUrl.php +16 -1
  818. package/project/.sdk/tm/php/utility/Media.php +111 -0
  819. package/project/.sdk/tm/php/utility/Param.php +66 -27
  820. package/project/.sdk/tm/php/utility/PrepareBody.php +5 -0
  821. package/project/.sdk/tm/php/utility/PrepareHeaders.php +83 -23
  822. package/project/.sdk/tm/php/utility/PrepareMethod.php +15 -0
  823. package/project/.sdk/tm/php/utility/PrepareQuery.php +22 -8
  824. package/project/.sdk/tm/php/utility/ResultBody.php +71 -0
  825. package/project/.sdk/tm/php/utility/TransformRequest.php +22 -11
  826. package/project/.sdk/tm/py/LICENSE +1 -1
  827. package/project/.sdk/tm/py/pkg/core/context.py +1 -1
  828. package/project/.sdk/tm/py/pkg/core/response.py +3 -0
  829. package/project/.sdk/tm/py/pkg/core/spec.py +3 -0
  830. package/project/.sdk/tm/py/pkg/feature/test_feature.py +27 -3
  831. package/project/.sdk/tm/py/pkg/feature/validate_feature.py +2 -0
  832. package/project/.sdk/tm/py/pkg/utility/fetcher.py +17 -7
  833. package/project/.sdk/tm/py/pkg/utility/make_fetch_def.py +2 -5
  834. package/project/.sdk/tm/py/pkg/utility/make_options.py +14 -8
  835. package/project/.sdk/tm/py/pkg/utility/make_point.py +40 -4
  836. package/project/.sdk/tm/py/pkg/utility/make_spec.py +12 -4
  837. package/project/.sdk/tm/py/pkg/utility/make_url.py +19 -1
  838. package/project/.sdk/tm/py/pkg/utility/media.py +88 -0
  839. package/project/.sdk/tm/py/pkg/utility/param.py +47 -18
  840. package/project/.sdk/tm/py/pkg/utility/prepare_body.py +4 -0
  841. package/project/.sdk/tm/py/pkg/utility/prepare_headers.py +56 -20
  842. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +7 -0
  843. package/project/.sdk/tm/py/pkg/utility/prepare_query.py +17 -8
  844. package/project/.sdk/tm/py/pkg/utility/result_body.py +51 -0
  845. package/project/.sdk/tm/py/pkg/utility/transform_request.py +18 -9
  846. package/project/.sdk/tm/py/test/feature_harness.py +1 -1
  847. package/project/.sdk/tm/py/test/runner.py +77 -2
  848. package/project/.sdk/tm/py/test/test_feature_corpus.py +69 -32
  849. package/project/.sdk/tm/py-data/LICENSE +1 -1
  850. package/project/.sdk/tm/py-data/Makefile +2 -2
  851. package/project/.sdk/tm/rb/LICENSE +1 -1
  852. package/project/.sdk/tm/rb/core/context.rb +1 -1
  853. package/project/.sdk/tm/rb/core/response.rb +3 -1
  854. package/project/.sdk/tm/rb/core/spec.rb +4 -1
  855. package/project/.sdk/tm/rb/feature/test_feature.rb +27 -8
  856. package/project/.sdk/tm/rb/feature/validate_feature.rb +3 -1
  857. package/project/.sdk/tm/rb/test/feature_corpus_test.rb +74 -30
  858. package/project/.sdk/tm/rb/test/feature_test.rb +1 -1
  859. package/project/.sdk/tm/rb/test/runner.rb +54 -2
  860. package/project/.sdk/tm/rb/utility/clean.rb +14 -6
  861. package/project/.sdk/tm/rb/utility/fetcher.rb +22 -14
  862. package/project/.sdk/tm/rb/utility/make_fetch_def.rb +2 -4
  863. package/project/.sdk/tm/rb/utility/make_point.rb +44 -8
  864. package/project/.sdk/tm/rb/utility/make_spec.rb +14 -2
  865. package/project/.sdk/tm/rb/utility/make_url.rb +13 -1
  866. package/project/.sdk/tm/rb/utility/media.rb +75 -0
  867. package/project/.sdk/tm/rb/utility/param.rb +44 -25
  868. package/project/.sdk/tm/rb/utility/prepare_body.rb +4 -1
  869. package/project/.sdk/tm/rb/utility/prepare_headers.rb +50 -16
  870. package/project/.sdk/tm/rb/utility/prepare_method.rb +6 -0
  871. package/project/.sdk/tm/rb/utility/prepare_query.rb +12 -4
  872. package/project/.sdk/tm/rb/utility/result_body.rb +45 -0
  873. package/project/.sdk/tm/rb/utility/transform_request.rb +17 -7
  874. package/project/.sdk/tm/rust/LICENSE +1 -1
  875. package/project/.sdk/tm/rust/core/context.rs +1 -1
  876. package/project/.sdk/tm/rust/core/helpers.rs +10 -0
  877. package/project/.sdk/tm/rust/core/response.rs +80 -1
  878. package/project/.sdk/tm/rust/core/spec.rs +4 -0
  879. package/project/.sdk/tm/rust/core/types.rs +1 -0
  880. package/project/.sdk/tm/rust/feature/test.rs +29 -2
  881. package/project/.sdk/tm/rust/feature/validate.rs +2 -0
  882. package/project/.sdk/tm/rust/tests/common/mod.rs +108 -1
  883. package/project/.sdk/tm/rust/utility/clean.rs +0 -2
  884. package/project/.sdk/tm/rust/utility/fetcher.rs +19 -11
  885. package/project/.sdk/tm/rust/utility/make_fetch_def.rs +12 -1
  886. package/project/.sdk/tm/rust/utility/make_options.rs +6 -5
  887. package/project/.sdk/tm/rust/utility/make_point.rs +80 -16
  888. package/project/.sdk/tm/rust/utility/make_spec.rs +23 -4
  889. package/project/.sdk/tm/rust/utility/make_url.rs +39 -2
  890. package/project/.sdk/tm/rust/utility/media.rs +116 -0
  891. package/project/.sdk/tm/rust/utility/mod.rs +1 -0
  892. package/project/.sdk/tm/rust/utility/param.rs +66 -19
  893. package/project/.sdk/tm/rust/utility/prepare_body.rs +4 -0
  894. package/project/.sdk/tm/rust/utility/prepare_headers.rs +85 -28
  895. package/project/.sdk/tm/rust/utility/prepare_query.rs +27 -5
  896. package/project/.sdk/tm/rust/utility/result_body.rs +15 -2
  897. package/project/.sdk/tm/rust/utility/transform_request.rs +27 -14
  898. package/project/.sdk/tm/scala/LICENSE +1 -1
  899. package/project/.sdk/tm/scala/Makefile +3 -1
  900. package/project/.sdk/tm/scala/core/Context.scala +1 -1
  901. package/project/.sdk/tm/scala/core/Contracts.scala +1 -0
  902. package/project/.sdk/tm/scala/core/Helpers.scala +7 -0
  903. package/project/.sdk/tm/scala/core/Response.scala +55 -0
  904. package/project/.sdk/tm/scala/core/SdkClient.scala +18 -5
  905. package/project/.sdk/tm/scala/core/Spec.scala +3 -0
  906. package/project/.sdk/tm/scala/feature/TestFeature.scala +36 -3
  907. package/project/.sdk/tm/scala/feature/TimeoutFeature.scala +39 -13
  908. package/project/.sdk/tm/scala/feature/ValidateFeature.scala +2 -0
  909. package/project/.sdk/tm/scala/sdktest/SdkTestMain.scala +16 -1
  910. package/project/.sdk/tm/scala/sdktest/ServerVariableTest.scala +49 -0
  911. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +1 -0
  912. package/project/.sdk/tm/scala/utility/Fetcher.scala +17 -2
  913. package/project/.sdk/tm/scala/utility/Make.scala +141 -43
  914. package/project/.sdk/tm/scala/utility/MakeSpec.scala +20 -2
  915. package/project/.sdk/tm/scala/utility/Media.scala +96 -0
  916. package/project/.sdk/tm/scala/utility/Misc.scala +56 -23
  917. package/project/.sdk/tm/scala/utility/Prepare.scala +84 -31
  918. package/project/.sdk/tm/scala/utility/Results.scala +5 -0
  919. package/project/.sdk/tm/scala/utility/Transform.scala +15 -19
  920. package/project/.sdk/tm/swift/LICENSE +1 -1
  921. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Context.swift +1 -1
  922. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Response.swift +57 -0
  923. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Spec.swift +3 -0
  924. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/core/Support.swift +8 -0
  925. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/TestFeature.swift +34 -3
  926. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/TimeoutFeature.swift +19 -3
  927. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/ValidateFeature.swift +2 -0
  928. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Fetcher.swift +21 -12
  929. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Make.swift +85 -18
  930. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +73 -7
  931. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Media.swift +76 -0
  932. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +118 -43
  933. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/ResultUtil.swift +18 -8
  934. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/FeatureTest.swift +31 -1
  935. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +6 -0
  936. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/ServerVariableTest.swift +42 -0
  937. package/project/.sdk/tm/ts/LICENSE +1 -1
  938. package/project/.sdk/tm/ts/src/Context.ts +1 -1
  939. package/project/.sdk/tm/ts/src/Control.ts +3 -0
  940. package/project/.sdk/tm/ts/src/Response.ts +10 -1
  941. package/project/.sdk/tm/ts/src/Spec.ts +4 -0
  942. package/project/.sdk/tm/ts/src/feature/base/BaseFeature.ts +28 -0
  943. package/project/.sdk/tm/ts/src/feature/netsim/NetsimFeature.ts +10 -8
  944. package/project/.sdk/tm/ts/src/feature/ratelimit/RatelimitFeature.ts +8 -6
  945. package/project/.sdk/tm/ts/src/feature/retry/RetryFeature.ts +17 -4
  946. package/project/.sdk/tm/ts/src/feature/test/TestFeature.ts +41 -13
  947. package/project/.sdk/tm/ts/src/feature/timeout/TimeoutFeature.ts +17 -3
  948. package/project/.sdk/tm/ts/src/feature/validate/ValidateFeature.ts +2 -0
  949. package/project/.sdk/tm/ts/src/tsconfig.json +2 -1
  950. package/project/.sdk/tm/ts/src/utility/CleanUtility.ts +25 -1
  951. package/project/.sdk/tm/ts/src/utility/FetcherUtility.ts +24 -1
  952. package/project/.sdk/tm/ts/src/utility/MakeErrorUtility.ts +2 -2
  953. package/project/.sdk/tm/ts/src/utility/MakeFetchDefUtility.ts +15 -2
  954. package/project/.sdk/tm/ts/src/utility/MakeOptionsUtility.ts +6 -6
  955. package/project/.sdk/tm/ts/src/utility/MakePointUtility.ts +38 -2
  956. package/project/.sdk/tm/ts/src/utility/MakeRequestUtility.ts +29 -2
  957. package/project/.sdk/tm/ts/src/utility/MakeResponseUtility.ts +3 -1
  958. package/project/.sdk/tm/ts/src/utility/MakeSpecUtility.ts +16 -6
  959. package/project/.sdk/tm/ts/src/utility/MakeUrlUtility.ts +16 -2
  960. package/project/.sdk/tm/ts/src/utility/MediaUtility.ts +143 -0
  961. package/project/.sdk/tm/ts/src/utility/ParamUtility.ts +50 -18
  962. package/project/.sdk/tm/ts/src/utility/PrepareBodyUtility.ts +6 -0
  963. package/project/.sdk/tm/ts/src/utility/PrepareHeadersUtility.ts +53 -11
  964. package/project/.sdk/tm/ts/src/utility/PrepareMethodUtility.ts +9 -0
  965. package/project/.sdk/tm/ts/src/utility/PrepareQueryUtility.ts +22 -6
  966. package/project/.sdk/tm/ts/src/utility/ResultBodyUtility.ts +68 -3
  967. package/project/.sdk/tm/ts/src/utility/TransformRequestUtility.ts +16 -6
  968. package/project/.sdk/tm/ts/test/definition-runner.ts +109 -3
  969. package/project/.sdk/tm/ts/test/feature/Corpus.test.ts +47 -16
  970. package/project/.sdk/tm/ts/test/feature/harness.ts +4 -1
  971. package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +1 -1
  972. package/project/.sdk/tm/ts/test/feature.test.ts +134 -0
  973. package/project/.sdk/tm/ts/test/live-contract.ts +60 -2
  974. package/project/.sdk/tm/ts/test/live-entity.ts +36 -12
  975. package/project/.sdk/tm/ts/test/live-runner.ts +79 -12
  976. package/project/.sdk/tm/ts/test/live-scenarios.ts +5 -4
  977. package/project/.sdk/tm/ts/test/pipeline.test.ts +52 -1
  978. package/project/.sdk/tm/ts/test/tsconfig.json +2 -1
  979. package/project/.sdk/tm/ts/test/utility.ts +35 -7
  980. package/project/.sdk/tm/zig/LICENSE +1 -1
  981. package/project/.sdk/tm/zig/core/context.zig +2 -1
  982. package/project/.sdk/tm/zig/core/helpers.zig +33 -0
  983. package/project/.sdk/tm/zig/core/response.zig +3 -0
  984. package/project/.sdk/tm/zig/core/spec.zig +27 -0
  985. package/project/.sdk/tm/zig/core/types.zig +6 -0
  986. package/project/.sdk/tm/zig/core/utility.zig +456 -84
  987. package/project/.sdk/tm/zig/feature/test.zig +31 -2
  988. package/project/.sdk/tm/zig/feature/validate.zig +2 -0
  989. package/project/.sdk/tm/zig/test/fh.zig +1 -1
  990. package/project/sdkgen-package.json +1 -1
  991. package/src/action/copies.ts +179 -46
  992. package/src/action/doctor.ts +13 -3
  993. package/src/action/package.ts +17 -9
  994. package/src/action/resolve.ts +41 -0
  995. package/src/admin/npm-trust.ts +9 -8
  996. package/src/cmp/AgentGuide.ts +4 -3
  997. package/src/cmp/AgentGuideFeature.ts +3 -2
  998. package/src/cmp/AgentGuideTop.ts +2 -1
  999. package/src/cmp/Changelog.ts +2 -1
  1000. package/src/cmp/Deploy.ts +2 -1
  1001. package/src/cmp/Entity.ts +1 -3
  1002. package/src/cmp/ExternalTarget.ts +2 -1
  1003. package/src/cmp/Feature.ts +2 -1
  1004. package/src/cmp/FeatureHook.ts +2 -1
  1005. package/src/cmp/License.ts +7 -5
  1006. package/src/cmp/Main.ts +2 -1
  1007. package/src/cmp/PublishWorkflow.ts +2 -1
  1008. package/src/cmp/Readme.ts +2 -1
  1009. package/src/cmp/ReadmeEntity.ts +3 -3
  1010. package/src/cmp/ReadmeErrors.ts +6 -4
  1011. package/src/cmp/ReadmeExplanation.ts +4 -3
  1012. package/src/cmp/ReadmeFeatures.ts +4 -3
  1013. package/src/cmp/ReadmeHowto.ts +4 -3
  1014. package/src/cmp/ReadmeInstall.ts +4 -3
  1015. package/src/cmp/ReadmeIntro.ts +3 -3
  1016. package/src/cmp/ReadmeModel.ts +6 -3
  1017. package/src/cmp/ReadmeOptions.ts +3 -3
  1018. package/src/cmp/ReadmeQuick.ts +4 -3
  1019. package/src/cmp/ReadmeRef.ts +3 -3
  1020. package/src/cmp/ReadmeRefFeatures.ts +2 -1
  1021. package/src/cmp/ReadmeStation.ts +2 -1
  1022. package/src/cmp/ReadmeTop.ts +121 -37
  1023. package/src/cmp/ReadmeUnions.ts +2 -1
  1024. package/src/cmp/Registered.ts +4 -4
  1025. package/src/cmp/Security.ts +14 -7
  1026. package/src/cmp/Test.ts +2 -1
  1027. package/src/cmp/TestControl.ts +1 -1
  1028. package/src/helpers/component.ts +25 -0
  1029. package/src/helpers/definition.ts +2 -2
  1030. package/src/helpers/definitionPlan.ts +135 -13
  1031. package/src/helpers/featureSource.ts +55 -2
  1032. package/src/helpers/flowGuard.ts +111 -0
  1033. package/src/helpers/generated.ts +488 -0
  1034. package/src/helpers/mcpTools.ts +47 -0
  1035. package/src/helpers/media.ts +79 -0
  1036. package/src/helpers/modelNames.ts +186 -16
  1037. package/src/helpers/naming.ts +188 -0
  1038. package/src/helpers/npm.ts +68 -0
  1039. package/src/helpers/npmScripts.ts +37 -0
  1040. package/src/helpers/opExample.ts +19 -11
  1041. package/src/helpers/opShape.ts +235 -29
  1042. package/src/helpers/optional.ts +76 -0
  1043. package/src/helpers/packageMeta.ts +83 -11
  1044. package/src/helpers/stdrep.ts +5 -1
  1045. package/src/helpers/testPolicy.ts +68 -1
  1046. package/src/helpers/text.ts +33 -0
  1047. package/src/sdkgen.ts +97 -14
  1048. package/src/testkit.ts +2 -1
  1049. package/src/utility.ts +41 -19
  1050. package/project/.sdk/src/cmp/go/fragment/SdkError.fragment.go +0 -22
  1051. package/project/.sdk/src/cmp/lua/fragment/SdkError.fragment.lua +0 -38
  1052. package/project/.sdk/src/cmp/perl/fragment/SdkError.fragment.pm +0 -27
  1053. package/project/.sdk/src/cmp/php/fragment/SdkError.fragment.php +0 -35
  1054. package/project/.sdk/src/cmp/py/fragment/SdkError.fragment.py +0 -27
  1055. package/project/.sdk/src/cmp/rb/fragment/SdkError.fragment.rb +0 -25
@@ -19,6 +19,7 @@
19
19
  // (it includes only core/struct.hpp), so this cannot close a cycle with
20
20
  // core/config.hpp, which pulls in the feature headers.
21
21
  #include "../core/schema.hpp"
22
+ #include "cookie.hpp"
22
23
 
23
24
  // prepareAuth is GENERATED, not templated: WHERE the credential goes -
24
25
  // header, query or cookie, and under what name - is a fact about THIS API
@@ -579,6 +580,8 @@ inline Value fetcher(CtxPtr ctx, const std::string& fullurl, const Value& fetchd
579
580
 
580
581
  // ---- makeFetchDef -----------------------------------------------------
581
582
 
583
+ inline bool isJsonRequest(const Value& point);
584
+
582
585
  inline Value makeFetchDef(CtxPtr ctx) {
583
586
  SpecPtr spec = ctx->spec;
584
587
  if (!spec) {
@@ -597,11 +600,15 @@ inline Value makeFetchDef(CtxPtr ctx) {
597
600
  map_put(fetchdef, "method", Value(spec->method));
598
601
  map_put(fetchdef, "headers", spec->headers);
599
602
 
603
+ // A map or a list is JSON, and so is a scalar on a point that declares a
604
+ // JSON body. Anything else goes as given.
600
605
  if (!is_nullish(spec->body)) {
601
- if (spec->body.is_map()) {
602
- map_put(fetchdef, "body", Value(Struct::jsonify(spec->body)));
606
+ const Value& body = spec->body;
607
+ bool scalar = body.is_string() || body.is_number() || body.is_bool();
608
+ if (body.is_map() || body.is_list() || (scalar && isJsonRequest(ctx->point))) {
609
+ map_put(fetchdef, "body", Value(Struct::jsonify(body)));
603
610
  } else {
604
- map_put(fetchdef, "body", spec->body);
611
+ map_put(fetchdef, "body", body);
605
612
  }
606
613
  }
607
614
 
@@ -638,6 +645,23 @@ inline std::string makeUrl(CtxPtr ctx) {
638
645
  }
639
646
  }
640
647
 
648
+ // A placeholder left in the route would send the request to the wrong route.
649
+ // The base's own placeholders are server variables, resolved with the options.
650
+ std::string base = spec->base;
651
+ while (!base.empty() && '/' == base.back()) base.pop_back();
652
+ const std::string route = 0 == url.compare(0, base.size(), base) ? url.substr(base.size()) : url;
653
+ std::string unfilled;
654
+ for (size_t at = route.find('{'); std::string::npos != at; at = route.find('{', at + 1)) {
655
+ size_t end = route.find_first_of("{}/", at + 1);
656
+ if (std::string::npos != end && '}' == route[end] && end > at + 1) {
657
+ unfilled += (unfilled.empty() ? "" : ", ") + route.substr(at, end - at + 1);
658
+ at = end;
659
+ }
660
+ }
661
+ if (!unfilled.empty()) {
662
+ throw ctx->makeError("url_param_missing", "URL path has no value for " + unfilled + ".");
663
+ }
664
+
641
665
  std::string qsep = "?";
642
666
  for (const auto& item : Struct::items(spec->query)) {
643
667
  std::string key = as_str(pair_key(item));
@@ -645,7 +669,10 @@ inline std::string makeUrl(CtxPtr ctx) {
645
669
  if (!is_nullish(val)) {
646
670
  url += qsep + Struct::escurl(Value(key)) + "=" + Struct::escurl(Value(Struct::stringify(val)));
647
671
  qsep = "&";
648
- map_put(resmatch, key, val);
672
+ // Sent with the request, never recorded as the entity's match.
673
+ if (spec->authquery.end() == std::find(spec->authquery.begin(), spec->authquery.end(), key)) {
674
+ map_put(resmatch, key, val);
675
+ }
649
676
  }
650
677
  }
651
678
 
@@ -655,6 +682,50 @@ inline std::string makeUrl(CtxPtr ctx) {
655
682
 
656
683
  // ---- makePoint --------------------------------------------------------
657
684
 
685
+ // The name a point gives a parameter in the call, if it renames it.
686
+ inline std::string paramAlias(const Value& point, const std::string& key) {
687
+ if (!point.is_map()) return "";
688
+ Value alias = Helpers::toMapAny(getp(point, "alias"));
689
+ if (!alias.is_map()) return "";
690
+ Value ak = getp(alias, key);
691
+ return ak.is_string() ? ak.as_string() : "";
692
+ }
693
+
694
+ // The value the call or its entity gives a point's parameter, under its name
695
+ // or the point's alias for it.
696
+ inline Value paramValue(CtxPtr ctx, const Value& point, const std::string& key) {
697
+ std::string akey = paramAlias(point, key);
698
+
699
+ Value val = getp(ctx->reqmatch, key, Value(nullptr));
700
+ if (val.is_null()) val = getp(ctx->match, key, Value(nullptr));
701
+ if (val.is_null() && !akey.empty()) val = getp(ctx->reqmatch, akey, Value(nullptr));
702
+ if (val.is_null()) val = getp(ctx->reqdata, key, Value(nullptr));
703
+ if (val.is_null()) val = getp(ctx->data, key, Value(nullptr));
704
+ if (val.is_null() && !akey.empty()) {
705
+ val = getp(ctx->reqdata, akey, Value(nullptr));
706
+ if (val.is_null()) val = getp(ctx->data, akey, Value(nullptr));
707
+ }
708
+
709
+ return val;
710
+ }
711
+
712
+ // The path parameters of a point that neither the call nor the entity gives a
713
+ // value for, looked up as param looks them up.
714
+ inline std::vector<std::string> unfilledParams(CtxPtr ctx, const Value& point) {
715
+ std::vector<std::string> missing;
716
+ Value parts = getp(point, "parts");
717
+ if (!parts.is_list()) return missing;
718
+ for (const auto& part : *parts.as_list()) {
719
+ if (!part.is_string()) continue;
720
+ const std::string& text = part.as_string();
721
+ if (text.size() < 3 || '{' != text.front() ||
722
+ text.size() - 1 != text.find_first_of("{}/", 1) || '}' != text.back()) continue;
723
+ std::string name = text.substr(1, text.size() - 2);
724
+ if (is_nullish(paramValue(ctx, point, name))) missing.push_back(name);
725
+ }
726
+ return missing;
727
+ }
728
+
658
729
  inline Value makePoint(CtxPtr ctx) {
659
730
  // A PrePoint feature hook (e.g. rbac) may short-circuit by storing an
660
731
  // error; surface it before any endpoint resolution or network activity.
@@ -669,8 +740,9 @@ inline Value makePoint(CtxPtr ctx) {
669
740
  OperationPtr op = ctx->op;
670
741
  Value options = ctx->options;
671
742
 
672
- std::string allowOp = as_str(Struct::getpath(options, {"allow", "op"}));
673
- if (allowOp.find(op->name) == std::string::npos) {
743
+ Value allowOpVal = Struct::getpath(options, {"allow", "op"});
744
+ std::string allowOp = as_str(allowOpVal);
745
+ if (!Helpers::allowed(allowOpVal, op->name)) {
674
746
  throw ctx->makeError("point_op_allow",
675
747
  "Operation \"" + op->name + "\" not allowed by SDK option allow.op value: \"" + allowOp + "\"");
676
748
  }
@@ -761,18 +833,50 @@ inline Value makePoint(CtxPtr ctx) {
761
833
  return last.is_string() && 0 == last.as_string().rfind("{", 0);
762
834
  };
763
835
 
764
- point = op->points[0];
765
- for (size_t i = 0; i < op->points.size(); i++) {
766
- const Value& cand = op->points[i];
767
- bool candTerm = terminalParam(cand);
768
- bool bestTerm = terminalParam(point);
769
- if (candTerm != bestTerm) {
770
- if (candTerm) point = cand;
836
+ auto ownPoint = [&](const std::vector<Value>& points) {
837
+ Value best = points[0];
838
+ for (const auto& cand : points) {
839
+ bool candTerm = terminalParam(cand);
840
+ bool bestTerm = terminalParam(best);
841
+ if (candTerm != bestTerm) {
842
+ if (candTerm) best = cand;
843
+ }
844
+ else if (partsLen(cand) < partsLen(best)) {
845
+ best = cand;
846
+ }
771
847
  }
772
- else if (partsLen(cand) < partsLen(point)) {
773
- point = cand;
848
+ return best;
849
+ };
850
+
851
+ // A call without an action falls back to a point without one, as
852
+ // generation does, and only to a route the call can fill.
853
+ std::vector<Value> plain;
854
+ for (const auto& cand : op->points) {
855
+ if (getp(Helpers::toMapAny(getp(cand, "select")), "$action", Value(nullptr)).is_null()) {
856
+ plain.push_back(cand);
774
857
  }
775
858
  }
859
+ if (plain.empty()) {
860
+ throw ctx->makeError("point_action_required",
861
+ "Operation \"" + op->name +
862
+ "\" has only action endpoints; pass $action to choose one.");
863
+ }
864
+ std::vector<Value> fillable;
865
+ for (const auto& cand : plain) {
866
+ if (unfilledParams(ctx, cand).empty()) fillable.push_back(cand);
867
+ }
868
+
869
+ if (fillable.empty()) {
870
+ std::string missing;
871
+ for (const auto& name : unfilledParams(ctx, ownPoint(plain))) {
872
+ missing += (missing.empty() ? "" : ", ") + name;
873
+ }
874
+ throw ctx->makeError("point_no_match",
875
+ "Operation \"" + op->name +
876
+ "\" has no endpoint whose path parameters are all given (missing: " + missing + ").");
877
+ }
878
+
879
+ point = ownPoint(fillable);
776
880
  }
777
881
 
778
882
  if (reqselector.is_map()) {
@@ -953,8 +1057,9 @@ inline SpecPtr makeSpec(CtxPtr ctx) {
953
1057
 
954
1058
  ctx->spec->method = utility->prepareMethod(ctx);
955
1059
 
956
- std::string allowMethod = as_str(Struct::getpath(options, {"allow", "method"}));
957
- if (allowMethod.find(ctx->spec->method) == std::string::npos) {
1060
+ Value allowMethodVal = Struct::getpath(options, {"allow", "method"});
1061
+ std::string allowMethod = as_str(allowMethodVal);
1062
+ if (!Helpers::allowed(allowMethodVal, ctx->spec->method)) {
958
1063
  throw ctx->makeError("spec_method_allow",
959
1064
  "Method \"" + ctx->spec->method + "\" not allowed by SDK option allow.method value: \"" + allowMethod + "\"");
960
1065
  }
@@ -984,7 +1089,25 @@ inline SpecPtr makeSpec(CtxPtr ctx) {
984
1089
  map_put(ctx->ctrl->explain, "spec", ctx->spec->toValue());
985
1090
  }
986
1091
 
1092
+ // Whatever prepareAuth sets in the query, under whichever name, is the
1093
+ // credential; a key it leaves as it was is the caller's.
1094
+ std::vector<std::pair<std::string, Value>> query;
1095
+ for (const auto& item : Struct::items(ctx->spec->query)) {
1096
+ query.emplace_back(as_str(pair_key(item)), pair_val(item));
1097
+ }
1098
+
987
1099
  SpecPtr spec = utility->prepareAuth(ctx);
1100
+ if (spec) {
1101
+ spec->authquery.clear();
1102
+ for (const auto& item : Struct::items(spec->query)) {
1103
+ std::string key = as_str(pair_key(item));
1104
+ auto was = std::find_if(query.begin(), query.end(),
1105
+ [&](const std::pair<std::string, Value>& kv) { return kv.first == key; });
1106
+ if (query.end() == was || !(was->second == pair_val(item))) {
1107
+ spec->authquery.push_back(key);
1108
+ }
1109
+ }
1110
+ }
988
1111
  ctx->spec = spec;
989
1112
  return spec;
990
1113
  }
@@ -1101,6 +1224,11 @@ inline ResultPtr resultBody(CtxPtr ctx) {
1101
1224
  if (response && response->jsonFunc && !is_nullish(response->body)) {
1102
1225
  result->body = response->jsonFunc();
1103
1226
  }
1227
+ if (response && response->unreadable) {
1228
+ Value sent = ctx->spec ? ctx->spec->headers : Value::undef();
1229
+ result->err = unreadableBody(ctx, result->status, result->headers, response->body, sent,
1230
+ result->err);
1231
+ }
1104
1232
  }
1105
1233
  return result;
1106
1234
  }
@@ -1255,44 +1383,216 @@ inline std::string prepareMethod(CtxPtr ctx) {
1255
1383
 
1256
1384
  // ---- prepareBody ------------------------------------------------------
1257
1385
 
1386
+ // ---- media ------------------------------------------------------------
1387
+
1388
+ // The media types a point declares: `response` (the model's `rs`) for the
1389
+ // Accept header, and `body` (the model's `rb`) for the request body.
1390
+
1391
+ // The data key holding a raw request body. Like `$action`, it can never be a
1392
+ // declared argument name.
1393
+ inline const char* rawBodyKey() { return "$body"; }
1394
+
1395
+ inline std::string mediaLower(std::string s) {
1396
+ for (auto& ch : s) ch = (char)std::tolower((unsigned char)ch);
1397
+ return s;
1398
+ }
1399
+
1400
+ inline bool isJsonMedia(const Value& v) {
1401
+ if (!v.is_string()) return false;
1402
+ std::string m = v.as_string().substr(0, v.as_string().find(';'));
1403
+ size_t b = m.find_first_not_of(" \t");
1404
+ size_t e = m.find_last_not_of(" \t");
1405
+ m = std::string::npos == b ? "" : mediaLower(m.substr(b, e - b + 1));
1406
+ return m == "application/json" || m == "text/json" ||
1407
+ (m.size() >= 5 && 0 == m.compare(m.size() - 5, 5, "+json"));
1408
+ }
1409
+
1410
+ // The declared JSON type alone, else every declared type in the model's
1411
+ // order; empty when no success response declares a body.
1412
+ inline std::string acceptOf(const Value& point) {
1413
+ Value res = getp(point, "response");
1414
+ Value media = getp(res, "media");
1415
+ if (!media.is_string() || media.as_string().empty()) return "";
1416
+ Value kind = getp(res, "kind");
1417
+ if (kind.is_string() && kind.as_string() == "json") return media.as_string();
1418
+ std::string out = media.as_string();
1419
+ Value alts = getp(res, "alternatives");
1420
+ if (alts.is_list()) {
1421
+ for (const auto& alt : *alts.as_list()) {
1422
+ Value m = getp(alt, "media");
1423
+ if (m.is_string() && !m.as_string().empty()) out += ", " + m.as_string();
1424
+ }
1425
+ }
1426
+ return out;
1427
+ }
1428
+
1429
+ inline bool isRawRequest(const Value& point) {
1430
+ Value kind = getp(getp(point, "body"), "kind");
1431
+ return kind.is_string() && kind.as_string() == "raw";
1432
+ }
1433
+
1434
+ inline bool isJsonRequest(const Value& point) {
1435
+ Value kind = getp(getp(point, "body"), "kind");
1436
+ return kind.is_string() && kind.as_string() == "json";
1437
+ }
1438
+
1439
+ inline bool hasMediaHeader(const Value& headers, const std::string& name) {
1440
+ for (const auto& item : Struct::items(headers)) {
1441
+ if (mediaLower(as_str(pair_key(item))) == name) return true;
1442
+ }
1443
+ return false;
1444
+ }
1445
+
1446
+ // A caller's accept wins. A declared request type replaces each JSON
1447
+ // content-type, the SDK default, and leaves any other the caller set.
1448
+ inline Value mediaHeaders(const Value& point, Value headers) {
1449
+ std::string accept = acceptOf(point);
1450
+ if (!accept.empty() && !hasMediaHeader(headers, "accept")) {
1451
+ map_put(headers, "accept", Value(accept));
1452
+ }
1453
+
1454
+ Value body = getp(point, "body");
1455
+ Value kind = getp(body, "kind");
1456
+ Value media = getp(body, "media");
1457
+ if (kind.is_string() && (kind.as_string() == "raw" || kind.as_string() == "json") &&
1458
+ media.is_string() && !media.as_string().empty()) {
1459
+ for (const auto& item : Struct::items(headers)) {
1460
+ std::string key = as_str(pair_key(item));
1461
+ if (mediaLower(key) == "content-type" && isJsonMedia(getp(headers, key))) {
1462
+ headers.as_map()->erase(key);
1463
+ }
1464
+ }
1465
+ if (!hasMediaHeader(headers, "content-type")) map_put(headers, "content-type", media);
1466
+ }
1467
+ return headers;
1468
+ }
1469
+
1470
+ // A string Value holds any bytes, and they are sent as they are.
1471
+ inline Value rawBody(const Value& reqdata) { return getp(reqdata, rawBodyKey()); }
1472
+
1258
1473
  inline Value prepareBody(CtxPtr ctx) {
1259
1474
  if (ctx->op->input == "data") {
1475
+ if (isRawRequest(ctx->point)) return rawBody(ctx->reqdata);
1260
1476
  return ctx->utility->transformRequest(ctx);
1261
1477
  }
1262
1478
  return Value::undef();
1263
1479
  }
1264
1480
 
1481
+ // ---- callArgs ---------------------------------------------------------
1482
+
1483
+ // One argument a point declares, with the name it travels under and the
1484
+ // value the call passes for it.
1485
+ struct CallArg {
1486
+ std::string name;
1487
+ std::string wire;
1488
+ Value val;
1489
+ };
1490
+
1491
+ // The arguments a point declares in one location, query or header, each with
1492
+ // the name it travels under and the value this call passes in its match or
1493
+ // else its data. Unlike a path parameter, the entity's stored match and data
1494
+ // never supply one.
1495
+ inline std::vector<CallArg> callArgs(CtxPtr ctx, const std::string& kind) {
1496
+ std::vector<CallArg> out;
1497
+ Value defs = ctx->point.is_map() ? getp(getp(ctx->point, "args"), kind) : Value::undef();
1498
+ if (!defs.is_list()) return out;
1499
+ for (const auto& ad : *defs.as_list()) {
1500
+ Value name = getp(ad, "name");
1501
+ if (!name.is_string() || name.as_string().empty()) continue;
1502
+ Value orig = getp(ad, "orig");
1503
+ std::string wire = orig.is_string() && !orig.as_string().empty() ?
1504
+ orig.as_string() : name.as_string();
1505
+ Value val = getp(ctx->reqmatch, name.as_string(), Value(nullptr));
1506
+ if (is_nullish(val)) val = getp(ctx->reqdata, name.as_string(), Value(nullptr));
1507
+ out.push_back({name.as_string(), wire, val});
1508
+ }
1509
+ return out;
1510
+ }
1511
+
1265
1512
  // ---- prepareHeaders ---------------------------------------------------
1266
1513
 
1514
+ // Strips the blanks around a cookie piece.
1515
+ inline std::string trimBlank(const std::string& s) {
1516
+ size_t from = s.find_first_not_of(" \t");
1517
+ if (std::string::npos == from) return "";
1518
+ return s.substr(from, s.find_last_not_of(" \t") - from + 1);
1519
+ }
1520
+
1521
+ // The form style of a cookie parameter: a list repeats the name, a map sends
1522
+ // its own keys, and every value is percent-encoded.
1523
+ inline std::string cookiePair(const std::string& wire, const Value& val) {
1524
+ auto esc = [](const Value& v) { return Struct::escurl(Value(Struct::stringify(v))); };
1525
+ std::vector<std::string> pairs;
1526
+ if (val.is_list()) {
1527
+ for (const auto& item : *val.as_list()) pairs.push_back(wire + "=" + esc(item));
1528
+ } else if (val.is_map()) {
1529
+ for (const auto& item : Struct::items(val)) {
1530
+ pairs.push_back(Struct::escurl(pair_key(item)) + "=" + esc(pair_val(item)));
1531
+ }
1532
+ } else {
1533
+ pairs.push_back(wire + "=" + esc(val));
1534
+ }
1535
+ std::string joined;
1536
+ for (size_t i = 0; i < pairs.size(); i++) joined += (0 < i ? "; " : "") + pairs[i];
1537
+ return joined;
1538
+ }
1539
+
1267
1540
  inline Value prepareHeaders(CtxPtr ctx) {
1268
1541
  Value options = ctx->client->optionsMap();
1269
1542
  Value headers = getp(options, "headers");
1270
1543
  Value out = is_nullish(headers) ? vmap() : Helpers::toMapAny(Struct::clone(headers));
1271
1544
  if (!out.is_map()) out = vmap();
1545
+ out = mediaHeaders(ctx->point, out);
1272
1546
 
1273
- // A header parameter travels as a header, under the name the definition
1274
- // gives it, and only from this call's own arguments. It replaces a default
1275
- // of the same name, whatever its case.
1547
+ // A header argument replaces a default of the same name, whatever its case.
1276
1548
  auto lower = [](std::string s) {
1277
1549
  for (auto& ch : s) ch = (char)std::tolower((unsigned char)ch);
1278
1550
  return s;
1279
1551
  };
1280
- Value aheader = ctx->point.is_map() ? getp(getp(ctx->point, "args"), "header") : Value::undef();
1281
- if (aheader.is_list()) {
1282
- for (const auto& hd : *aheader.as_list()) {
1283
- Value name = getp(hd, "name");
1284
- if (!name.is_string() || name.as_string().empty()) continue;
1285
- Value orig = getp(hd, "orig");
1286
- std::string wire = lower(orig.is_string() && !orig.as_string().empty() ?
1287
- orig.as_string() : name.as_string());
1288
- Value val = getp(ctx->reqmatch, name.as_string(), Value(nullptr));
1289
- if (val.is_null()) val = getp(ctx->reqdata, name.as_string(), Value(nullptr));
1290
- if (is_nullish(val)) continue;
1291
- for (const auto& item : Struct::items(out)) {
1292
- std::string key = as_str(pair_key(item));
1293
- if (lower(key) == wire) out.as_map()->erase(key);
1552
+ for (const auto& arg : callArgs(ctx, "header")) {
1553
+ if (is_nullish(arg.val)) continue;
1554
+ std::string wire = lower(arg.wire);
1555
+ for (const auto& item : Struct::items(out)) {
1556
+ std::string key = as_str(pair_key(item));
1557
+ if (lower(key) == wire) out.as_map()->erase(key);
1558
+ }
1559
+ map_put(out, wire, Value(Struct::stringify(arg.val)));
1560
+ }
1561
+
1562
+ // A cookie argument travels in the cookie header, form serialized and
1563
+ // percent-encoded, replacing a cookie of the same name among those the
1564
+ // caller's headers already send.
1565
+ std::vector<CallArg> sent;
1566
+ for (const auto& arg : callArgs(ctx, "cookie")) {
1567
+ if (!is_nullish(arg.val)) sent.push_back(arg);
1568
+ }
1569
+ if (!sent.empty()) {
1570
+ std::vector<std::string> names;
1571
+ for (const auto& arg : sent) {
1572
+ if (arg.val.is_map()) {
1573
+ for (const auto& item : Struct::items(arg.val)) names.push_back(Struct::escurl(pair_key(item)));
1574
+ } else {
1575
+ names.push_back(arg.wire);
1576
+ }
1577
+ }
1578
+ std::vector<std::string> kept;
1579
+ for (const auto& item : Struct::items(out)) {
1580
+ std::string key = as_str(pair_key(item));
1581
+ if (lower(key) != "cookie") continue;
1582
+ Value given = getp(out, key);
1583
+ if (given.is_string()) {
1584
+ for (const auto& cookie : cookieKeep(given.as_string(), names)) kept.push_back(cookie);
1294
1585
  }
1295
- map_put(out, wire, Value(Struct::stringify(val)));
1586
+ out.as_map()->erase(key);
1587
+ }
1588
+ for (const auto& arg : sent) {
1589
+ std::string pair = cookiePair(arg.wire, arg.val);
1590
+ if (!pair.empty()) kept.push_back(pair);
1591
+ }
1592
+ if (!kept.empty()) {
1593
+ std::string joined;
1594
+ for (size_t i = 0; i < kept.size(); i++) joined += (0 < i ? "; " : "") + kept[i];
1595
+ map_put(out, "cookie", Value(joined));
1296
1596
  }
1297
1597
  }
1298
1598
  return out;
@@ -1301,13 +1601,6 @@ inline Value prepareHeaders(CtxPtr ctx) {
1301
1601
  // ---- param ------------------------------------------------------------
1302
1602
 
1303
1603
  inline Value param(CtxPtr ctx, const Value& paramdef) {
1304
- Value point = ctx->point;
1305
- SpecPtr spec = ctx->spec;
1306
- Value match = ctx->match;
1307
- Value reqmatch = ctx->reqmatch;
1308
- Value data = ctx->data;
1309
- Value reqdata = ctx->reqdata;
1310
-
1311
1604
  int pt = Struct::typify(paramdef);
1312
1605
 
1313
1606
  std::string key;
@@ -1318,29 +1611,14 @@ inline Value param(CtxPtr ctx, const Value& paramdef) {
1318
1611
  key = k.is_string() ? k.as_string() : "";
1319
1612
  }
1320
1613
 
1321
- std::string akey = "";
1322
- if (point.is_map()) {
1323
- Value alias = Helpers::toMapAny(getp(point, "alias"));
1324
- if (alias.is_map()) {
1325
- Value ak = getp(alias, key);
1326
- if (ak.is_string()) akey = ak.as_string();
1327
- }
1614
+ std::string akey = paramAlias(ctx->point, key);
1615
+ if (ctx->spec && !akey.empty() &&
1616
+ getp(ctx->reqmatch, key, Value(nullptr)).is_null() &&
1617
+ getp(ctx->match, key, Value(nullptr)).is_null()) {
1618
+ map_put(ctx->spec->alias, akey, Value(key));
1328
1619
  }
1329
1620
 
1330
- Value val = getp(reqmatch, key, Value(nullptr));
1331
- if (val.is_null()) val = getp(match, key, Value(nullptr));
1332
- if (val.is_null() && !akey.empty()) {
1333
- if (spec) map_put(spec->alias, akey, Value(key));
1334
- val = getp(reqmatch, akey, Value(nullptr));
1335
- }
1336
- if (val.is_null()) val = getp(reqdata, key, Value(nullptr));
1337
- if (val.is_null()) val = getp(data, key, Value(nullptr));
1338
- if (val.is_null() && !akey.empty()) {
1339
- val = getp(reqdata, akey, Value(nullptr));
1340
- if (val.is_null()) val = getp(data, akey, Value(nullptr));
1341
- }
1342
-
1343
- return val;
1621
+ return paramValue(ctx, ctx->point, key);
1344
1622
  }
1345
1623
 
1346
1624
  // ---- prepareParams ----------------------------------------------------
@@ -1396,9 +1674,9 @@ inline Value prepareQuery(CtxPtr ctx) {
1396
1674
 
1397
1675
  // A path parameter travels in the path. The generated config lists them as
1398
1676
  // args.params, which prepareParams reads; params is the older list of names.
1399
- // A header parameter travels in the headers, which prepareHeaders fills.
1400
1677
  Value aparams = point.is_map() ? getp(getp(point, "args"), "params") : Value::undef();
1401
1678
  Value aheader = point.is_map() ? getp(getp(point, "args"), "header") : Value::undef();
1679
+ Value acookie = point.is_map() ? getp(getp(point, "args"), "cookie") : Value::undef();
1402
1680
  auto named = [&](const Value& defs, const std::string& s) {
1403
1681
  if (!defs.is_list()) return false;
1404
1682
  for (const auto& pd : *defs.as_list()) {
@@ -1408,9 +1686,13 @@ inline Value prepareQuery(CtxPtr ctx) {
1408
1686
  return false;
1409
1687
  };
1410
1688
 
1689
+ // A header or cookie parameter travels in the headers, which prepareHeaders
1690
+ // fills, unless a query parameter shares its name: then both are sent.
1691
+ Value aquery = point.is_map() ? getp(getp(point, "args"), "query") : Value::undef();
1692
+ auto elsewhere = [&](const std::string& s) { return (named(aheader, s) || named(acookie, s)) && !named(aquery, s); };
1693
+
1411
1694
  // A query parameter travels under the name the definition gives it, its
1412
1695
  // orig, which the model may have renamed for the caller.
1413
- Value aquery = point.is_map() ? getp(getp(point, "args"), "query") : Value::undef();
1414
1696
  auto wire_name = [&](const std::string& s) {
1415
1697
  if (aquery.is_list()) {
1416
1698
  for (const auto& qd : *aquery.as_list()) {
@@ -1430,10 +1712,18 @@ inline Value prepareQuery(CtxPtr ctx) {
1430
1712
  std::string key = as_str(pair_key(item));
1431
1713
  Value val = pair_val(item);
1432
1714
  if (!is_nullish(val) && "$action" != key && !contains_str(params, key) &&
1433
- !named(aparams, key) && !named(aheader, key)) {
1715
+ !named(aparams, key) && !elsewhere(key)) {
1434
1716
  map_put(out, wire_name(key), val);
1435
1717
  }
1436
1718
  }
1719
+
1720
+ // A create or update passes its query arguments in its data.
1721
+ for (const auto& arg : callArgs(ctx, "query")) {
1722
+ if (!is_nullish(arg.val) && !contains_str(params, arg.name) &&
1723
+ !named(aparams, arg.name) && !elsewhere(arg.name)) {
1724
+ map_put(out, arg.wire, arg.val);
1725
+ }
1726
+ }
1437
1727
  return out;
1438
1728
  }
1439
1729
 
@@ -1470,15 +1760,28 @@ inline Value omitKeys(const Value& reqdata, const std::vector<std::string>& name
1470
1760
  // the body is a copy without it. The caller's map is left untouched.
1471
1761
  inline Value stripAction(const Value& reqdata) { return omitKeys(reqdata, {"$action"}); }
1472
1762
 
1473
- // A header argument travels as a header, which prepareHeaders sends, so the
1474
- // body is built from the request data without it.
1475
- inline std::vector<std::string> headerArgNames(CtxPtr ctx) {
1763
+ inline bool fieldArg(CtxPtr ctx, const std::string& name) {
1764
+ if (!ctx->point.is_map()) return false;
1765
+ for (const char* kind : {"header", "cookie", "query"}) {
1766
+ Value defs = getp(getp(ctx->point, "args"), kind);
1767
+ if (!defs.is_list()) continue;
1768
+ for (const auto& ad : *defs.as_list()) {
1769
+ Value n = getp(ad, "name");
1770
+ Value f = getp(ad, "field");
1771
+ if (n.is_string() && n.as_string() == name && f.is_bool() && f.as_bool()) return true;
1772
+ }
1773
+ }
1774
+ return false;
1775
+ }
1776
+
1777
+ // A header, cookie or query argument travels where prepareHeaders or
1778
+ // prepareQuery sends it, so the body is built from the request data without
1779
+ // it, unless the entity declares it as a field too.
1780
+ inline std::vector<std::string> routedArgNames(CtxPtr ctx) {
1476
1781
  std::vector<std::string> names;
1477
- Value aheader = ctx->point.is_map() ? getp(getp(ctx->point, "args"), "header") : Value::undef();
1478
- if (aheader.is_list()) {
1479
- for (const auto& hd : *aheader.as_list()) {
1480
- Value name = getp(hd, "name");
1481
- if (name.is_string() && !name.as_string().empty()) names.push_back(name.as_string());
1782
+ for (const char* kind : {"header", "cookie", "query"}) {
1783
+ for (const auto& arg : callArgs(ctx, kind)) {
1784
+ if (!fieldArg(ctx, arg.name)) names.push_back(arg.name);
1482
1785
  }
1483
1786
  }
1484
1787
  return names;
@@ -1487,7 +1790,7 @@ inline std::vector<std::string> headerArgNames(CtxPtr ctx) {
1487
1790
  inline Value transformRequest(CtxPtr ctx) {
1488
1791
  if (ctx->spec) ctx->spec->step = "reqform";
1489
1792
 
1490
- Value reqdata = omitKeys(ctx->reqdata, headerArgNames(ctx));
1793
+ Value reqdata = omitKeys(ctx->reqdata, routedArgNames(ctx));
1491
1794
 
1492
1795
  Value transform = Helpers::toMapAny(getp(ctx->point, "transform"));
1493
1796
  if (!transform.is_map()) return stripAction(reqdata);
@@ -1502,11 +1805,13 @@ inline Value transformRequest(CtxPtr ctx) {
1502
1805
 
1503
1806
  // ---- makeOptions ------------------------------------------------------
1504
1807
 
1505
- inline Value optsNoEntity(const Value& settings) {
1808
+ inline Value optsPlain(const Value& settings, const std::string& name) {
1506
1809
  if (!settings.is_map()) return settings;
1507
1810
  Value out = vmap();
1508
1811
  for (const auto& kv : *settings.as_map()) {
1509
- if ("entity" != kv.first) map_put(out, kv.first, kv.second);
1812
+ if ("entity" != kv.first && !("rbac" == name && "rules" == kv.first)) {
1813
+ map_put(out, kv.first, kv.second);
1814
+ }
1510
1815
  }
1511
1816
  return out;
1512
1817
  }
@@ -1514,8 +1819,9 @@ inline Value optsNoEntity(const Value& settings) {
1514
1819
  // The options to scan for secrets. The feature map is keyed by feature
1515
1820
  // names, not field names, so it is scanned as a list: `secrets` must not
1516
1821
  // make every setting of that feature a secret. Entity blocks hold entity
1517
- // settings and seeded records, never a credential, so none is scanned. The
1518
- // raw scan still sees the feature list form, whose entries each carry `name`.
1822
+ // settings and seeded records, never a credential, so none is scanned, and
1823
+ // nor are rbac's rules, keyed by entity and operation names. The raw scan
1824
+ // still sees the feature list form, whose entries each carry `name`.
1519
1825
  inline Value optsWithout(const Value& opts, std::initializer_list<const char*> keys) {
1520
1826
  Value out = vmap();
1521
1827
  if (!opts.is_map()) return out;
@@ -1526,13 +1832,16 @@ inline Value optsWithout(const Value& opts, std::initializer_list<const char*> k
1526
1832
  if ("feature" == kv.first && (kv.second.is_map() || kv.second.is_list())) {
1527
1833
  Value list = vlist();
1528
1834
  if (kv.second.is_map()) {
1529
- for (const auto& f : *kv.second.as_map()) list.as_list()->push_back(optsNoEntity(f.second));
1835
+ for (const auto& f : *kv.second.as_map()) list.as_list()->push_back(optsPlain(f.second, f.first));
1530
1836
  } else {
1531
- for (const auto& f : *kv.second.as_list()) list.as_list()->push_back(optsNoEntity(f));
1837
+ for (const auto& f : *kv.second.as_list()) {
1838
+ Value name = f.is_map() ? getp(f, "name") : Value::undef();
1839
+ list.as_list()->push_back(optsPlain(f, name.is_string() ? name.as_string() : ""));
1840
+ }
1532
1841
  }
1533
1842
  map_put(out, kv.first, list);
1534
1843
  } else if ("test" == kv.first) {
1535
- map_put(out, kv.first, optsNoEntity(kv.second));
1844
+ map_put(out, kv.first, optsPlain(kv.second, ""));
1536
1845
  } else {
1537
1846
  map_put(out, kv.first, kv.second);
1538
1847
  }
@@ -1540,6 +1849,51 @@ inline Value optsWithout(const Value& opts, std::initializer_list<const char*> k
1540
1849
  return out;
1541
1850
  }
1542
1851
 
1852
+ // A templated base URL takes each {name} from options.server. An empty value
1853
+ // cannot make a working URL, so it fails construction, except in test mode,
1854
+ // where it becomes test-<name>.
1855
+ inline std::string resolveServerBase(const std::string& base, const Value& opts,
1856
+ const Value& config, CtxPtr ctx) {
1857
+ bool testmode = is_true(Struct::getpath(opts, {"test", "active"}))
1858
+ || is_true(Struct::getpath(opts, {"feature", "test", "active"}));
1859
+ Value server = Helpers::toMapAny(getp(opts, "server"));
1860
+ Value nameV = Struct::getpath(config, {"main", "name"});
1861
+ std::string sdkname = nameV.is_string() && !nameV.as_string().empty()
1862
+ ? nameV.as_string() : "SDK";
1863
+ auto namechar = [](char c) {
1864
+ return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || '_' == c;
1865
+ };
1866
+
1867
+ std::string out;
1868
+ size_t i = 0;
1869
+ while (i < base.size()) {
1870
+ size_t j = i + 1;
1871
+ if ('{' == base[i]) {
1872
+ while (j < base.size() && namechar(base[j])) j++;
1873
+ }
1874
+ // A placeholder only when it closes and the name is [A-Za-z0-9_]+.
1875
+ if ('{' != base[i] || j == i + 1 || j >= base.size() || '}' != base[j]) {
1876
+ out += base[i];
1877
+ i++;
1878
+ continue;
1879
+ }
1880
+ std::string name = base.substr(i + 1, j - i - 1);
1881
+ Value val = server.is_map() ? getp(server, name) : Value::undef();
1882
+ if (val.is_string() && !val.as_string().empty()) {
1883
+ out += val.as_string();
1884
+ } else if (testmode) {
1885
+ out += "test-" + name;
1886
+ } else {
1887
+ throw std::make_shared<SdkError>("server_var_required",
1888
+ sdkname + ": the server variable '" + name + "' is required: the API base URL is '" +
1889
+ base + "' - pass {\"server\", vmap({{\"" + name + "\", Value(\"...\")}})} in the SDK options",
1890
+ ctx.get());
1891
+ }
1892
+ i = j + 1;
1893
+ }
1894
+ return out;
1895
+ }
1896
+
1543
1897
  inline Value makeOptions(CtxPtr ctx) {
1544
1898
  Value options = ctx->options;
1545
1899
  if (!options.is_map()) options = vmap();
@@ -1676,6 +2030,11 @@ inline Value makeOptions(CtxPtr ctx) {
1676
2030
  }
1677
2031
  }
1678
2032
 
2033
+ Value baseV = getp(opts, "base");
2034
+ if (baseV.is_string() && std::string::npos != baseV.as_string().find('{')) {
2035
+ map_put(opts, "base", Value(resolveServerBase(baseV.as_string(), opts, config, ctx)));
2036
+ }
2037
+
1679
2038
  // Resolve the feature add-order: an explicit list order (above) wins;
1680
2039
  // otherwise order the map test-first, then the remaining names sorted, so
1681
2040
  // the outcome is deterministic and `test` is always the base transport.