@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
@@ -826,7 +826,8 @@ defmodule ProjectName.Utility do
826
826
  # The options to scan for secrets. The feature map is keyed by feature
827
827
  # names, not field names, so it is scanned as a list: `secrets` must not
828
828
  # make every setting of that feature a secret. Entity blocks hold entity
829
- # settings and seeded records, never a credential, so they are skipped.
829
+ # settings and seeded records, never a credential, so they are skipped, and
830
+ # so are rbac's rules, keyed by entity and operation names.
830
831
  defp secret_scan(opts, names) do
831
832
  out = S.jm([])
832
833
 
@@ -836,10 +837,15 @@ defmodule ProjectName.Utility do
836
837
  nil
837
838
 
838
839
  k == "feature" and (S.ismap(v) or S.islist(v)) ->
839
- S.setprop(out, k, S.jt(Enum.map(H.entries(v), fn {_, f} -> without(f, "entity") end)))
840
+ blocks =
841
+ Enum.map(H.entries(v), fn {fk, f} ->
842
+ plain(f, if(S.ismap(v), do: fk, else: S.getprop(f, "name")))
843
+ end)
844
+
845
+ S.setprop(out, k, S.jt(blocks))
840
846
 
841
847
  k == "test" ->
842
- S.setprop(out, k, without(v, "entity"))
848
+ S.setprop(out, k, plain(v, nil))
843
849
 
844
850
  true ->
845
851
  S.setprop(out, k, v)
@@ -849,6 +855,10 @@ defmodule ProjectName.Utility do
849
855
  out
850
856
  end
851
857
 
858
+ defp plain(node, name) do
859
+ if name == "rbac", do: without(without(node, "entity"), "rules"), else: without(node, "entity")
860
+ end
861
+
852
862
  defp without(node, key) do
853
863
  if S.ismap(node) do
854
864
  out = S.jm([])
@@ -861,6 +871,61 @@ defmodule ProjectName.Utility do
861
871
 
862
872
  # ---- make_point ----------------------------------------------------------
863
873
 
874
+ # A terminal parameter marks a record route (/boards/{id}); a
875
+ # cross-reference ends in the relationship's name (/posts/{id}/author), and
876
+ # failing that the shallower path wins. The same rule runs at generation
877
+ # time, in helpers/opShape.ts — both sides must move together.
878
+ defp parts_len(p) do
879
+ parts = S.getprop(p, "parts")
880
+ if S.islist(parts), do: S.size(parts), else: 0
881
+ end
882
+
883
+ defp terminal_param?(p) do
884
+ parts = S.getprop(p, "parts")
885
+
886
+ if S.islist(parts) and S.size(parts) > 0 do
887
+ last = S.getelem(parts, S.size(parts) - 1)
888
+ is_binary(last) and String.starts_with?(last, "{")
889
+ else
890
+ false
891
+ end
892
+ end
893
+
894
+ defp own_point(points) do
895
+ Enum.reduce(points, hd(points), fn cand, best ->
896
+ ct = terminal_param?(cand)
897
+ bt = terminal_param?(best)
898
+
899
+ cond do
900
+ ct != bt -> if ct, do: cand, else: best
901
+ parts_len(cand) < parts_len(best) -> cand
902
+ true -> best
903
+ end
904
+ end)
905
+ end
906
+
907
+ # The path parameters of a point that neither the call nor the entity gives
908
+ # a value for, looked up as param_impl looks them up.
909
+ defp unfilled(ctx, point) do
910
+ parts = S.getprop(point, "parts")
911
+
912
+ if S.islist(parts) and S.size(parts) > 0 do
913
+ Enum.flat_map(0..(S.size(parts) - 1), fn i ->
914
+ part = S.getelem(parts, i)
915
+
916
+ case is_binary(part) && Regex.run(~r/\A\{([^{}\/]+)\}\z/, part) do
917
+ [_, name] ->
918
+ if param_value(ctx, point, name) != nil, do: [], else: [name]
919
+
920
+ _ ->
921
+ []
922
+ end
923
+ end)
924
+ else
925
+ []
926
+ end
927
+ end
928
+
864
929
  def make_point_impl(ctx) do
865
930
  out = S.getprop(ctx, "out")
866
931
  pre = S.getprop(out, "point")
@@ -877,15 +942,16 @@ defmodule ProjectName.Utility do
877
942
  op = S.getprop(ctx, "op")
878
943
  options = S.getprop(ctx, "options")
879
944
  opname = S.getprop(op, "name")
880
- allow_op = H.or_(S.getpath(options, "allow.op"), "")
945
+ allow_op = S.getpath(options, "allow.op")
881
946
  points = S.getprop(op, "points")
882
947
  npoints = S.size(points)
883
948
 
884
949
  cond do
885
- is_binary(allow_op) and not String.contains?(allow_op, opname) ->
950
+ not allowed?(allow_op, opname) ->
886
951
  {nil,
887
952
  Context.make_error(ctx, "point_op_allow",
888
- "Operation \"" <> opname <> "\" not allowed by SDK option allow.op value: \"" <> allow_op <> "\"")}
953
+ "Operation \"" <> opname <> "\" not allowed by SDK option allow.op value: \"" <>
954
+ H.str_or(allow_op, "") <> "\"")}
889
955
 
890
956
  npoints == 0 ->
891
957
  {nil,
@@ -950,44 +1016,18 @@ defmodule ProjectName.Utility do
950
1016
 
951
1017
  matched? = match?({:halt, _}, point)
952
1018
 
953
- point =
1019
+ # select.exist can list more than the params needed to pick a point,
1020
+ # so nothing matched. A call without an action falls back to a
1021
+ # point without one, as generation does, and only to a route the
1022
+ # call can fill.
1023
+ {point, plain} =
954
1024
  if matched? do
955
- elem(point, 1)
1025
+ {elem(point, 1), nil}
956
1026
  else
957
- # select.exist can list more than the params needed to pick a
958
- # point, so nothing matched. Fall back to the entity's own
959
- # route: a terminal parameter marks a record route
960
- # (/boards/{id}) where a cross-reference ends in the
961
- # relationship's name (/posts/{id}/author), and failing that
962
- # the shallower path wins. The same rule runs at generation
963
- # time, in helpers/opShape.ts — both sides must move together.
964
- parts_len = fn p ->
965
- parts = S.getprop(p, "parts")
966
- if S.islist(parts), do: S.size(parts), else: 0
967
- end
968
-
969
- terminal_param? = fn p ->
970
- parts = S.getprop(p, "parts")
971
-
972
- if S.islist(parts) and S.size(parts) > 0 do
973
- last = S.getelem(parts, S.size(parts) - 1)
974
- is_binary(last) and String.starts_with?(last, "{")
975
- else
976
- false
977
- end
978
- end
979
-
980
- Enum.reduce(0..(npoints - 1), S.getelem(points, 0), fn i, best ->
981
- cand = S.getelem(points, i)
982
- ct = terminal_param?.(cand)
983
- bt = terminal_param?.(best)
984
-
985
- cond do
986
- ct != bt -> if ct, do: cand, else: best
987
- parts_len.(cand) < parts_len.(best) -> cand
988
- true -> best
989
- end
990
- end)
1027
+ all = Enum.map(0..(npoints - 1), &S.getelem(points, &1))
1028
+ plain = Enum.filter(all, &(S.getprop(H.to_map(S.getprop(&1, "select")), "$action") == nil))
1029
+ fillable = Enum.filter(plain, &(unfilled(ctx, &1) == []))
1030
+ {if(fillable == [], do: nil, else: own_point(fillable)), plain}
991
1031
  end
992
1032
 
993
1033
  unmatched_action =
@@ -1007,6 +1047,15 @@ defmodule ProjectName.Utility do
1007
1047
  Context.make_error(ctx, "point_action_invalid",
1008
1048
  "Operation \"" <> opname <> "\" action \"" <> S.stringify(unmatched_action) <> "\" is not valid.")
1009
1049
 
1050
+ plain == [] ->
1051
+ Context.make_error(ctx, "point_action_required",
1052
+ "Operation \"" <> opname <> "\" has only action endpoints; pass $action to choose one.")
1053
+
1054
+ point == nil and plain != nil ->
1055
+ Context.make_error(ctx, "point_no_match",
1056
+ "Operation \"" <> opname <> "\" has no endpoint whose path parameters are all given (missing: " <>
1057
+ Enum.join(unfilled(ctx, own_point(plain)), ", ") <> ").")
1058
+
1010
1059
  reqselector != nil ->
1011
1060
  req_action = S.getprop(reqselector, "$action")
1012
1061
 
@@ -1068,13 +1117,14 @@ defmodule ProjectName.Utility do
1068
1117
  S.setprop(ctx, "spec", spec)
1069
1118
  S.setprop(spec, "method", prepare_method(ctx))
1070
1119
 
1071
- allow_method = H.or_(S.getpath(options, "allow.method"), "")
1120
+ allow_method = S.getpath(options, "allow.method")
1072
1121
  method = S.getprop(spec, "method")
1073
1122
 
1074
- if is_binary(allow_method) and not String.contains?(allow_method, method) do
1123
+ if not allowed?(allow_method, method) do
1075
1124
  {nil,
1076
1125
  Context.make_error(ctx, "spec_method_allow",
1077
- "Method \"" <> method <> "\" not allowed by SDK option allow.method value: \"" <> allow_method <> "\"")}
1126
+ "Method \"" <> H.str_or(method, "") <> "\" not allowed by SDK option allow.method value: \"" <>
1127
+ H.str_or(allow_method, "") <> "\"")}
1078
1128
  else
1079
1129
  S.setprop(spec, "params", prepare_params(ctx))
1080
1130
  S.setprop(spec, "query", prepare_query(ctx))
@@ -1101,11 +1151,21 @@ defmodule ProjectName.Utility do
1101
1151
  explain = S.getprop(ctrl, "explain")
1102
1152
  if explain != nil, do: S.setprop(explain, "spec", spec)
1103
1153
 
1154
+ # Whatever prepare_auth sets in the query, under whichever name, is
1155
+ # the credential; a key it leaves as it was is the caller's.
1156
+ query = Map.new(H.entries(S.getprop(spec, "query")))
1157
+
1104
1158
  {spec2, err} = prepare_auth(ctx)
1105
1159
 
1106
1160
  if err != nil do
1107
1161
  {nil, err}
1108
1162
  else
1163
+ authquery =
1164
+ for {key, val} <- H.entries(S.getprop(spec2, "query")),
1165
+ not Map.has_key?(query, key) or Map.get(query, key) != val,
1166
+ do: key
1167
+
1168
+ S.setprop(spec2, "authquery", S.jt(authquery))
1109
1169
  S.setprop(ctx, "spec", spec2)
1110
1170
  {spec2, nil}
1111
1171
  end
@@ -1402,11 +1462,19 @@ defmodule ProjectName.Utility do
1402
1462
  ])
1403
1463
 
1404
1464
  body = S.getprop(spec, "body")
1465
+ scalar = is_binary(body) or is_number(body) or is_boolean(body)
1405
1466
 
1467
+ # A map or a list is JSON, and so is a scalar on a point that declares
1468
+ # a JSON body. Anything else goes as given.
1406
1469
  cond do
1407
- body == nil -> :ok
1408
- S.ismap(body) -> S.setprop(fetchdef, "body", S.jsonify(body))
1409
- true -> S.setprop(fetchdef, "body", body)
1470
+ body == nil ->
1471
+ :ok
1472
+
1473
+ S.isnode(body) or (scalar and json_request?(S.getprop(ctx, "point"))) ->
1474
+ S.setprop(fetchdef, "body", S.jsonify(body))
1475
+
1476
+ true ->
1477
+ S.setprop(fetchdef, "body", body)
1410
1478
  end
1411
1479
 
1412
1480
  {fetchdef, nil}
@@ -1446,6 +1514,9 @@ defmodule ProjectName.Utility do
1446
1514
 
1447
1515
  resmatch = S.jm([])
1448
1516
 
1517
+ # Sent with the request, never recorded as the entity's match.
1518
+ authquery = for {_, name} <- H.entries(S.getprop(spec, "authquery")), do: name
1519
+
1449
1520
  url1 =
1450
1521
  Enum.reduce(H.entries(S.getprop(spec, "params")), url0, fn {key, val}, acc ->
1451
1522
  if val != nil and is_binary(key) do
@@ -1457,19 +1528,32 @@ defmodule ProjectName.Utility do
1457
1528
  end
1458
1529
  end)
1459
1530
 
1531
+ # A placeholder left in the route would send the request to the wrong
1532
+ # route. The base's own placeholders are server variables, resolved
1533
+ # with the options.
1534
+ base = S.getprop(spec, "base")
1535
+ base = if is_binary(base), do: String.trim_trailing(base, "/"), else: ""
1536
+ route = String.replace_prefix(url1, base, "")
1537
+ unfilled = Regex.scan(~r/\{[^{}\/]+\}/, route) |> Enum.map(&hd/1)
1538
+
1460
1539
  {url2, _qsep} =
1461
1540
  Enum.reduce(H.entries(S.getprop(spec, "query")), {url1, "?"}, fn {key, val}, {acc, qsep} ->
1462
1541
  if val != nil and is_binary(key) do
1463
1542
  vstr = if is_binary(val), do: val, else: S.stringify(val)
1464
- S.setprop(resmatch, key, val)
1543
+ if key not in authquery, do: S.setprop(resmatch, key, val)
1465
1544
  {acc <> qsep <> S.escurl(key) <> "=" <> S.escurl(vstr), "&"}
1466
1545
  else
1467
1546
  {acc, qsep}
1468
1547
  end
1469
1548
  end)
1470
1549
 
1471
- S.setprop(result, "resmatch", resmatch)
1472
- {url2, nil}
1550
+ if unfilled != [] do
1551
+ {"", Context.make_error(ctx, "url_param_missing",
1552
+ "URL path has no value for " <> Enum.join(unfilled, ", ") <> ".")}
1553
+ else
1554
+ S.setprop(result, "resmatch", resmatch)
1555
+ {url2, nil}
1556
+ end
1473
1557
  end
1474
1558
  end
1475
1559
 
@@ -1478,10 +1562,6 @@ defmodule ProjectName.Utility do
1478
1562
  def param_impl(ctx, paramdef) do
1479
1563
  point = S.getprop(ctx, "point")
1480
1564
  spec = S.getprop(ctx, "spec")
1481
- match = S.getprop(ctx, "match")
1482
- reqmatch = S.getprop(ctx, "reqmatch")
1483
- data = S.getprop(ctx, "data")
1484
- reqdata = S.getprop(ctx, "reqdata")
1485
1565
 
1486
1566
  key =
1487
1567
  if is_binary(paramdef) do
@@ -1491,45 +1571,158 @@ defmodule ProjectName.Utility do
1491
1571
  if is_binary(k), do: k, else: ""
1492
1572
  end
1493
1573
 
1494
- akey =
1495
- if point != nil do
1496
- alias = H.to_map(S.getprop(point, "alias"))
1574
+ akey = param_alias(point, key)
1497
1575
 
1498
- if alias != nil do
1499
- ak = S.getprop(alias, key)
1500
- if is_binary(ak), do: ak, else: ""
1501
- else
1502
- ""
1503
- end
1504
- else
1505
- ""
1506
- end
1576
+ if spec != nil and akey != "" and S.getprop(S.getprop(ctx, "reqmatch"), key) == nil and
1577
+ S.getprop(S.getprop(ctx, "match"), key) == nil do
1578
+ S.setprop(S.getprop(spec, "alias"), akey, key)
1579
+ end
1507
1580
 
1508
- val = S.getprop(reqmatch, key)
1509
- val = if val == nil, do: S.getprop(match, key), else: val
1581
+ param_value(ctx, point, key)
1582
+ end
1510
1583
 
1511
- val =
1512
- if val == nil and akey != "" do
1513
- if spec != nil, do: S.setprop(S.getprop(spec, "alias"), akey, key)
1514
- S.getprop(reqmatch, akey)
1515
- else
1516
- val
1517
- end
1584
+ # The name a point gives a parameter in the call, if it renames it.
1585
+ defp param_alias(point, key) do
1586
+ alias = if point != nil, do: H.to_map(S.getprop(point, "alias")), else: nil
1587
+ ak = if alias != nil, do: S.getprop(alias, key), else: nil
1588
+ if is_binary(ak), do: ak, else: ""
1589
+ end
1518
1590
 
1591
+ # The value the call or its entity gives a point's parameter, under its name
1592
+ # or the point's alias for it.
1593
+ defp param_value(ctx, point, key) do
1594
+ akey = param_alias(point, key)
1595
+ reqmatch = S.getprop(ctx, "reqmatch")
1596
+ reqdata = S.getprop(ctx, "reqdata")
1597
+ data = S.getprop(ctx, "data")
1598
+
1599
+ val = S.getprop(reqmatch, key)
1600
+ val = if val == nil, do: S.getprop(S.getprop(ctx, "match"), key), else: val
1601
+ val = if val == nil and akey != "", do: S.getprop(reqmatch, akey), else: val
1519
1602
  val = if val == nil, do: S.getprop(reqdata, key), else: val
1520
1603
  val = if val == nil, do: S.getprop(data, key), else: val
1521
1604
 
1522
- val =
1523
- if val == nil and akey != "" do
1524
- v2 = S.getprop(reqdata, akey)
1525
- if v2 == nil, do: S.getprop(data, akey), else: v2
1526
- else
1527
- val
1528
- end
1605
+ if val == nil and akey != "" do
1606
+ v2 = S.getprop(reqdata, akey)
1607
+ if v2 == nil, do: S.getprop(data, akey), else: v2
1608
+ else
1609
+ val
1610
+ end
1611
+ end
1612
+
1613
+ # The arguments a point declares in one location, query or header, each as
1614
+ # {name, wire, val}: the name it travels under and the value this call
1615
+ # passes in its match or else its data. Unlike a path parameter, the
1616
+ # entity's stored match and data never supply one.
1617
+ defp call_args(ctx, kind) do
1618
+ point = S.getprop(ctx, "point")
1619
+ defs = if point != nil, do: S.getpath(point, "args." <> kind), else: nil
1529
1620
 
1530
- val
1621
+ if S.islist(defs) and S.size(defs) > 0 do
1622
+ Enum.flat_map(0..(S.size(defs) - 1), fn i ->
1623
+ ad = S.getelem(defs, i)
1624
+ name = S.getprop(ad, "name")
1625
+
1626
+ if is_binary(name) and name != "" do
1627
+ orig = S.getprop(ad, "orig")
1628
+ wire = if is_binary(orig) and orig != "", do: orig, else: name
1629
+ val = S.getprop(S.getprop(ctx, "reqmatch"), name)
1630
+ val = if val == nil, do: S.getprop(S.getprop(ctx, "reqdata"), name), else: val
1631
+ [{name, wire, val}]
1632
+ else
1633
+ []
1634
+ end
1635
+ end)
1636
+ else
1637
+ []
1638
+ end
1531
1639
  end
1532
1640
 
1641
+ # ---- media ---------------------------------------------------------------
1642
+
1643
+ # The media types a point declares: `response` (the model's `rs`) for the
1644
+ # Accept header, and `body` (the model's `rb`) for the request body.
1645
+
1646
+ # The data key holding a raw request body. Like `$action`, it can never be
1647
+ # a declared argument name.
1648
+ @raw_body "$body"
1649
+
1650
+ def json_media?(media) do
1651
+ m =
1652
+ if(is_binary(media), do: media, else: "")
1653
+ |> String.split(";", parts: 2)
1654
+ |> hd()
1655
+ |> String.trim()
1656
+ |> String.downcase()
1657
+
1658
+ m == "application/json" or m == "text/json" or String.ends_with?(m, "+json")
1659
+ end
1660
+
1661
+ # The declared JSON type alone, else every declared type in the model's
1662
+ # order; nil when no success response declares a body.
1663
+ def accept_of(point) do
1664
+ res = S.getprop(point, "response")
1665
+ media = S.getprop(res, "media")
1666
+
1667
+ cond do
1668
+ not is_binary(media) or media == "" ->
1669
+ nil
1670
+
1671
+ S.getprop(res, "kind") == "json" ->
1672
+ media
1673
+
1674
+ true ->
1675
+ alts = S.getprop(res, "alternatives")
1676
+ n = if S.islist(alts), do: S.size(alts), else: 0
1677
+
1678
+ others =
1679
+ if n == 0 do
1680
+ []
1681
+ else
1682
+ Enum.flat_map(0..(n - 1), fn i ->
1683
+ m = S.getprop(S.getelem(alts, i), "media")
1684
+ if is_binary(m) and m != "", do: [m], else: []
1685
+ end)
1686
+ end
1687
+
1688
+ Enum.join([media | others], ", ")
1689
+ end
1690
+ end
1691
+
1692
+ def raw_request?(point), do: S.getprop(S.getprop(point, "body"), "kind") == "raw"
1693
+ def json_request?(point), do: S.getprop(S.getprop(point, "body"), "kind") == "json"
1694
+
1695
+ defp media_header?(headers, name) do
1696
+ Enum.any?(H.entries(headers), fn {k, _} -> is_binary(k) and String.downcase(k) == name end)
1697
+ end
1698
+
1699
+ # A caller's accept wins. A declared request type replaces each JSON
1700
+ # content-type, the SDK default, and leaves any other the caller set.
1701
+ def media_headers(point, headers) do
1702
+ accept = accept_of(point)
1703
+
1704
+ if accept != nil and not media_header?(headers, "accept"),
1705
+ do: S.setprop(headers, "accept", accept)
1706
+
1707
+ body = S.getprop(point, "body")
1708
+ media = S.getprop(body, "media")
1709
+
1710
+ if S.getprop(body, "kind") in ["raw", "json"] and is_binary(media) and media != "" do
1711
+ Enum.each(H.entries(headers), fn {k, v} ->
1712
+ if is_binary(k) and String.downcase(k) == "content-type" and json_media?(v),
1713
+ do: S.delprop(headers, k)
1714
+ end)
1715
+
1716
+ if not media_header?(headers, "content-type"),
1717
+ do: S.setprop(headers, "content-type", media)
1718
+ end
1719
+
1720
+ headers
1721
+ end
1722
+
1723
+ # A binary, of bytes or text, sent as it is.
1724
+ def raw_body(reqdata), do: if(S.ismap(reqdata), do: S.getprop(reqdata, @raw_body), else: nil)
1725
+
1533
1726
  # ---- prepare_* -----------------------------------------------------------
1534
1727
 
1535
1728
  @method_map %{
@@ -1541,6 +1734,14 @@ defmodule ProjectName.Utility do
1541
1734
  "patch" => "PATCH"
1542
1735
  }
1543
1736
 
1737
+ # Whether a comma-separated allow option names the item: whole names, any case.
1738
+ def allowed?(names, item) when is_binary(names) and is_binary(item) and item != "" do
1739
+ want = String.upcase(item)
1740
+ names |> String.split(",") |> Enum.any?(fn name -> String.upcase(String.trim(name)) == want end)
1741
+ end
1742
+
1743
+ def allowed?(_names, _item), do: false
1744
+
1544
1745
  def prepare_method_impl(ctx) do
1545
1746
  opname = S.getprop(S.getprop(ctx, "op"), "name")
1546
1747
 
@@ -1567,41 +1768,92 @@ defmodule ProjectName.Utility do
1567
1768
  if S.ismap(cloned), do: cloned, else: S.jm([])
1568
1769
  end
1569
1770
 
1570
- # A header parameter travels as a header, under the name the definition
1571
- # gives it, and only from this call's own arguments. It replaces a default
1572
- # of the same name, whatever its case.
1573
- point = S.getprop(ctx, "point")
1574
- aheader = if point != nil, do: S.getpath(point, "args.header"), else: nil
1771
+ out = media_headers(S.getprop(ctx, "point"), out)
1575
1772
 
1576
- if S.islist(aheader) and S.size(aheader) > 0 do
1577
- Enum.each(0..(S.size(aheader) - 1), fn i ->
1578
- hd = S.getelem(aheader, i)
1579
- name = S.getprop(hd, "name")
1773
+ # A header argument replaces a default of the same name, whatever its case.
1774
+ Enum.each(call_args(ctx, "header"), fn {_name, wire, val} ->
1775
+ if val != nil do
1776
+ key = String.downcase(wire)
1580
1777
 
1581
- if is_binary(name) and name != "" do
1582
- orig = S.getprop(hd, "orig")
1583
- wire = if is_binary(orig) and orig != "", do: orig, else: name
1584
- val = S.getprop(S.getprop(ctx, "reqmatch"), name)
1585
- val = if val == nil, do: S.getprop(S.getprop(ctx, "reqdata"), name), else: val
1586
- if val != nil do
1587
- key = String.downcase(wire)
1778
+ Enum.each(H.entries(out), fn {k, _} ->
1779
+ if is_binary(k) and String.downcase(k) == key, do: S.delprop(out, k)
1780
+ end)
1588
1781
 
1589
- Enum.each(H.entries(out), fn {k, _} ->
1590
- if is_binary(k) and String.downcase(k) == key, do: S.delprop(out, k)
1591
- end)
1782
+ S.setprop(out, key, S.stringify(val))
1783
+ end
1784
+ end)
1785
+
1786
+ # A cookie argument travels in the cookie header, form serialized and
1787
+ # percent-encoded, replacing a cookie of the same name among those the
1788
+ # caller's headers already send.
1789
+ sent = Enum.filter(call_args(ctx, "cookie"), fn {_name, _wire, val} -> val != nil end)
1790
+
1791
+ if sent != [] do
1792
+ names =
1793
+ Enum.flat_map(sent, fn {_name, wire, val} ->
1794
+ if S.ismap(val), do: Enum.map(S.keysof(val), &S.escurl/1), else: [wire]
1795
+ end)
1796
+
1797
+ given =
1798
+ Enum.filter(H.entries(out), fn {k, _} -> is_binary(k) and String.downcase(k) == "cookie" end)
1592
1799
 
1593
- S.setprop(out, key, S.stringify(val))
1800
+ kept = Enum.flat_map(given, fn {_, v} -> if is_binary(v), do: cookie_keep(v, names), else: [] end)
1801
+
1802
+ Enum.each(given, fn {k, _} -> S.delprop(out, k) end)
1803
+
1804
+ pairs =
1805
+ Enum.flat_map(sent, fn {_name, wire, val} ->
1806
+ case cookie_pair(wire, val) do
1807
+ "" -> []
1808
+ pair -> [pair]
1594
1809
  end
1595
- end
1596
- end)
1810
+ end)
1811
+
1812
+ if kept ++ pairs != [], do: S.setprop(out, "cookie", Enum.join(kept ++ pairs, "; "))
1597
1813
  end
1598
1814
 
1599
1815
  out
1600
1816
  end
1601
1817
 
1818
+ # The caller's cookie pieces with the named cookies removed: a cookie is one
1819
+ # ;-delimited piece, whatever its value holds.
1820
+ def cookie_keep(header, names) do
1821
+ header
1822
+ |> String.split(";")
1823
+ |> Enum.map(&String.trim/1)
1824
+ |> Enum.reject(fn cookie -> cookie == "" or cookie_name(cookie) in names end)
1825
+ end
1826
+
1827
+ defp cookie_name(cookie), do: cookie |> String.split("=", parts: 2) |> hd() |> String.trim()
1828
+
1829
+ # The form style of a cookie parameter: a list repeats the name, a map sends
1830
+ # its own keys, and every value is percent-encoded.
1831
+ defp cookie_pair(wire, val) do
1832
+ esc = fn v -> S.escurl(S.stringify(v)) end
1833
+
1834
+ pairs =
1835
+ cond do
1836
+ S.islist(val) ->
1837
+ Enum.map(H.entries(val), fn {_i, item} -> wire <> "=" <> esc.(item) end)
1838
+
1839
+ S.ismap(val) ->
1840
+ Enum.map(S.keysof(val), fn k -> S.escurl(k) <> "=" <> esc.(S.getprop(val, k)) end)
1841
+
1842
+ true ->
1843
+ [wire <> "=" <> esc.(val)]
1844
+ end
1845
+
1846
+ Enum.join(pairs, "; ")
1847
+ end
1848
+
1602
1849
  def prepare_body_impl(ctx) do
1603
1850
  op = S.getprop(ctx, "op")
1604
- if S.getprop(op, "input") == "data", do: transform_request(ctx), else: nil
1851
+
1852
+ cond do
1853
+ S.getprop(op, "input") != "data" -> nil
1854
+ raw_request?(S.getprop(ctx, "point")) -> raw_body(S.getprop(ctx, "reqdata"))
1855
+ true -> transform_request(ctx)
1856
+ end
1605
1857
  end
1606
1858
 
1607
1859
  def prepare_params_impl(ctx) do
@@ -1687,8 +1939,14 @@ defmodule ProjectName.Utility do
1687
1939
 
1688
1940
  # A path parameter travels in the path. The generated config lists them
1689
1941
  # as args.params, which prepare_params reads; params is the older list.
1690
- # A header parameter travels in the headers, which prepare_headers fills.
1691
- param_strs = param_strs ++ arg_names(point, "args.params") ++ arg_names(point, "args.header")
1942
+ # A header or cookie parameter travels in the headers, which prepare_headers
1943
+ # fills, unless a query parameter shares its name: then both are sent.
1944
+ declared = arg_names(point, "args.query")
1945
+
1946
+ param_strs =
1947
+ param_strs ++
1948
+ arg_names(point, "args.params") ++
1949
+ Enum.reject(arg_names(point, "args.header") ++ arg_names(point, "args.cookie"), &(&1 in declared))
1692
1950
 
1693
1951
  # A query parameter travels under the name the definition gives it, its
1694
1952
  # orig, which the model may have renamed for the caller.
@@ -1718,6 +1976,11 @@ defmodule ProjectName.Utility do
1718
1976
  end
1719
1977
  end)
1720
1978
 
1979
+ # A create or update passes its query arguments in its data.
1980
+ Enum.each(call_args(ctx, "query"), fn {name, orig, val} ->
1981
+ if val != nil and not Enum.member?(param_strs, name), do: S.setprop(out, orig, val)
1982
+ end)
1983
+
1721
1984
  out
1722
1985
  end
1723
1986
 
@@ -1927,11 +2190,71 @@ defmodule ProjectName.Utility do
1927
2190
  jf = S.getprop(response, "json_func")
1928
2191
  body = S.getprop(response, "body")
1929
2192
  if jf != nil and body != nil and S.isfunc(jf), do: S.setprop(result, "body", jf.())
2193
+
2194
+ if S.getprop(response, "unreadable") == true do
2195
+ spec = S.getprop(ctx, "spec")
2196
+ sent = if spec != nil, do: S.getprop(spec, "headers")
2197
+
2198
+ S.setprop(result, "err",
2199
+ unreadable_body(ctx, S.getprop(result, "status"), S.getprop(result, "headers"), body, sent,
2200
+ S.getprop(result, "err")))
2201
+ end
1930
2202
  end
1931
2203
 
1932
2204
  result
1933
2205
  end
1934
2206
 
2207
+ @body_preview_length 160
2208
+
2209
+ # A body that is not JSON. An HTTP failure keeps its own error, with the
2210
+ # response described; otherwise the code tells a wrong content type from
2211
+ # malformed JSON.
2212
+ def unreadable_body(ctx, status, headers, text, sent, failed) do
2213
+ type = body_header(headers, "content-type")
2214
+ agent = to_string(clean(ctx, body_header(sent, "user-agent")))
2215
+
2216
+ detail =
2217
+ "HTTP " <> to_string(status) <> ", content-type " <> if(type == "", do: "none", else: type) <>
2218
+ ", user-agent " <> if(agent == "", do: "transport default", else: agent) <>
2219
+ if(text == nil, do: "", else: ", body: " <> body_preview(ctx, text))
2220
+
2221
+ cond do
2222
+ match?(%ProjectName.Error{}, failed) ->
2223
+ %{failed | msg: failed.msg <> " (" <> detail <> ")"}
2224
+
2225
+ failed != nil ->
2226
+ %RuntimeError{message: err_msg(failed) <> " (" <> detail <> ")"}
2227
+
2228
+ type == "" or String.contains?(String.downcase(type), "json") ->
2229
+ Context.make_error(ctx, "response_json_invalid", "response: body is not valid JSON (" <> detail <> ")")
2230
+
2231
+ true ->
2232
+ Context.make_error(ctx, "response_content_type",
2233
+ "response: expected JSON, got " <> type <> " (" <> detail <> ")")
2234
+ end
2235
+ end
2236
+
2237
+ defp body_header(headers, name) do
2238
+ if S.ismap(headers) do
2239
+ case Enum.find(H.entries(headers), fn {k, _v} -> String.downcase(to_string(k)) == name end) do
2240
+ {_k, v} -> to_string(v)
2241
+ nil -> ""
2242
+ end
2243
+ else
2244
+ ""
2245
+ end
2246
+ end
2247
+
2248
+ # Cleaned whole: a secret the bound would split could leave its prefix.
2249
+ defp body_preview(ctx, text) do
2250
+ flat = to_string(clean(ctx, String.trim(Regex.replace(~r/\s+/, to_string(text), " "))))
2251
+ points = String.codepoints(flat)
2252
+
2253
+ if length(points) > @body_preview_length,
2254
+ do: Enum.join(Enum.take(points, @body_preview_length)) <> "...",
2255
+ else: flat
2256
+ end
2257
+
1935
2258
  def result_headers_impl(ctx) do
1936
2259
  response = S.getprop(ctx, "response")
1937
2260
  result = S.getprop(ctx, "result")
@@ -1955,17 +2278,28 @@ defmodule ProjectName.Utility do
1955
2278
  # untouched.
1956
2279
  defp strip_action(reqdata), do: omit_keys(reqdata, ["$action"])
1957
2280
 
1958
- # A header argument travels as a header, which prepare_headers_impl sends, so
1959
- # the body is built from the request data without it.
1960
- defp header_arg_names(point) do
1961
- aheader = if point != nil, do: S.getpath(point, "args.header"), else: nil
2281
+ # A header, cookie or query argument travels where prepare_headers_impl or
2282
+ # prepare_query_impl sends it, so the body is built from the request data
2283
+ # without it, unless the entity declares it as a field too.
2284
+ defp routed_arg_names(ctx) do
2285
+ (call_args(ctx, "header") ++ call_args(ctx, "cookie") ++ call_args(ctx, "query"))
2286
+ |> Enum.map(&elem(&1, 0))
2287
+ |> Enum.reject(&field_arg?(ctx, &1))
2288
+ end
1962
2289
 
1963
- if S.islist(aheader) and S.size(aheader) > 0 do
1964
- Enum.map(0..(S.size(aheader) - 1), &S.getprop(S.getelem(aheader, &1), "name"))
1965
- |> Enum.filter(&(is_binary(&1) and &1 != ""))
1966
- else
1967
- []
1968
- end
2290
+ defp field_arg?(ctx, name) do
2291
+ point = S.getprop(ctx, "point")
2292
+
2293
+ point != nil and
2294
+ Enum.any?(["header", "cookie", "query"], fn kind ->
2295
+ defs = S.getpath(point, "args." <> kind)
2296
+
2297
+ S.islist(defs) and S.size(defs) > 0 and
2298
+ Enum.any?(0..(S.size(defs) - 1), fn i ->
2299
+ ad = S.getelem(defs, i)
2300
+ name == S.getprop(ad, "name") and true == S.getprop(ad, "field")
2301
+ end)
2302
+ end)
1969
2303
  end
1970
2304
 
1971
2305
  defp omit_keys(reqdata, names) do
@@ -1987,7 +2321,7 @@ defmodule ProjectName.Utility do
1987
2321
  point = S.getprop(ctx, "point")
1988
2322
  if spec != nil, do: S.setprop(spec, "step", "reqform")
1989
2323
 
1990
- data = omit_keys(S.getprop(ctx, "reqdata"), header_arg_names(point))
2324
+ data = omit_keys(S.getprop(ctx, "reqdata"), routed_arg_names(ctx))
1991
2325
  transform = H.to_map(S.getprop(point, "transform"))
1992
2326
 
1993
2327
  reqdata =
@@ -2089,19 +2423,37 @@ defmodule ProjectName.Utility do
2089
2423
  has_ua =
2090
2424
  Enum.any?(H.entries(headers_node), fn {k, _v} -> String.downcase(to_string(k)) == "user-agent" end)
2091
2425
 
2426
+ with_body = method in [:post, :put, :patch, :delete] and is_binary(body)
2427
+ content_type? = fn {k, _v} -> String.downcase(to_string(k)) == "content-type" end
2428
+
2429
+ # :httpc takes a body's content type beside the headers, not among them.
2430
+ ctype =
2431
+ case Enum.find(H.entries(headers_node), content_type?) do
2432
+ {_k, v} -> to_string(v)
2433
+ nil -> "application/json"
2434
+ end
2435
+
2436
+ pairs =
2437
+ if with_body,
2438
+ do: Enum.reject(H.entries(headers_node), content_type?),
2439
+ else: H.entries(headers_node)
2440
+
2092
2441
  hlist0 =
2093
- Enum.map(H.entries(headers_node), fn {k, v} ->
2442
+ Enum.map(pairs, fn {k, v} ->
2094
2443
  {String.to_charlist(to_string(k)), String.to_charlist(to_string(v))}
2095
2444
  end)
2096
2445
 
2097
2446
  hlist =
2098
2447
  if has_ua, do: hlist0, else: [{~c"User-Agent", String.to_charlist(@default_user_agent)} | hlist0]
2099
2448
 
2449
+ # The default User-Agent is recorded with the headers the request sent.
2450
+ if not has_ua, do: S.setprop(headers_node, "user-agent", @default_user_agent)
2451
+
2100
2452
  url = String.to_charlist(fullurl)
2101
2453
 
2102
2454
  request =
2103
- if method in [:post, :put, :patch, :delete] and is_binary(body) do
2104
- {url, hlist, ~c"application/json", body}
2455
+ if with_body do
2456
+ {url, hlist, String.to_charlist(ctype), body}
2105
2457
  else
2106
2458
  {url, hlist}
2107
2459
  end
@@ -2124,14 +2476,14 @@ defmodule ProjectName.Utility do
2124
2476
 
2125
2477
  body_str = if is_binary(resp_body), do: resp_body, else: to_string(resp_body)
2126
2478
 
2127
- json_body =
2128
- if String.length(body_str) > 0 do
2479
+ {json_body, unreadable} =
2480
+ if String.trim(body_str) != "" do
2129
2481
  case safe_json(body_str) do
2130
- {:ok, v} -> v
2131
- _ -> nil
2482
+ {:ok, v} -> {v, false}
2483
+ _ -> {nil, true}
2132
2484
  end
2133
2485
  else
2134
- nil
2486
+ {nil, false}
2135
2487
  end
2136
2488
 
2137
2489
  status_text = if status < 400, do: "OK", else: "Error"
@@ -2141,7 +2493,8 @@ defmodule ProjectName.Utility do
2141
2493
  "statusText", status_text,
2142
2494
  "headers", rh,
2143
2495
  "json", fn -> json_body end,
2144
- "body", body_str
2496
+ "body", body_str,
2497
+ "unreadable", unreadable
2145
2498
  ]), nil}
2146
2499
 
2147
2500
  {:error, reason} ->