@cloudinary/asset-management-mcp 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (902) hide show
  1. package/README.md +103 -58
  2. package/bin/mcp-server.js +6079 -864
  3. package/bin/mcp-server.js.map +113 -82
  4. package/esm/funcs/assetRelationsCreateAssetRelationsByAssetId.d.ts +3 -3
  5. package/esm/funcs/assetRelationsCreateAssetRelationsByAssetId.d.ts.map +1 -1
  6. package/esm/funcs/assetRelationsCreateAssetRelationsByAssetId.js +8 -6
  7. package/esm/funcs/assetRelationsCreateAssetRelationsByAssetId.js.map +1 -1
  8. package/esm/funcs/assetRelationsCreateAssetRelationsByPublicId.d.ts +3 -3
  9. package/esm/funcs/assetRelationsCreateAssetRelationsByPublicId.d.ts.map +1 -1
  10. package/esm/funcs/assetRelationsCreateAssetRelationsByPublicId.js +5 -5
  11. package/esm/funcs/assetRelationsCreateAssetRelationsByPublicId.js.map +1 -1
  12. package/esm/funcs/assetRelationsDeleteAssetRelationsByAssetId.d.ts +3 -3
  13. package/esm/funcs/assetRelationsDeleteAssetRelationsByAssetId.d.ts.map +1 -1
  14. package/esm/funcs/assetRelationsDeleteAssetRelationsByAssetId.js +6 -6
  15. package/esm/funcs/assetRelationsDeleteAssetRelationsByAssetId.js.map +1 -1
  16. package/esm/funcs/assetRelationsDeleteAssetRelationsByPublicId.d.ts +3 -3
  17. package/esm/funcs/assetRelationsDeleteAssetRelationsByPublicId.d.ts.map +1 -1
  18. package/esm/funcs/assetRelationsDeleteAssetRelationsByPublicId.js +5 -5
  19. package/esm/funcs/assetRelationsDeleteAssetRelationsByPublicId.js.map +1 -1
  20. package/esm/funcs/assetsDeleteBackupVersions.d.ts +2 -2
  21. package/esm/funcs/assetsDeleteBackupVersions.d.ts.map +1 -1
  22. package/esm/funcs/assetsDeleteBackupVersions.js +9 -7
  23. package/esm/funcs/assetsDeleteBackupVersions.js.map +1 -1
  24. package/esm/funcs/assetsDestroyByAssetId.d.ts +4 -5
  25. package/esm/funcs/assetsDestroyByAssetId.d.ts.map +1 -1
  26. package/esm/funcs/assetsDestroyByAssetId.js +4 -5
  27. package/esm/funcs/assetsDestroyByAssetId.js.map +1 -1
  28. package/esm/funcs/assetsDownloadAsset.d.ts +2 -2
  29. package/esm/funcs/assetsDownloadAsset.d.ts.map +1 -1
  30. package/esm/funcs/assetsDownloadAsset.js +3 -9
  31. package/esm/funcs/assetsDownloadAsset.js.map +1 -1
  32. package/esm/funcs/assetsDownloadBackupAsset.d.ts +1 -1
  33. package/esm/funcs/assetsDownloadBackupAsset.d.ts.map +1 -1
  34. package/esm/funcs/assetsDownloadBackupAsset.js +3 -9
  35. package/esm/funcs/assetsDownloadBackupAsset.js.map +1 -1
  36. package/esm/funcs/assetsExplicitAsset.d.ts +2 -2
  37. package/esm/funcs/assetsExplicitAsset.d.ts.map +1 -1
  38. package/esm/funcs/assetsExplicitAsset.js +7 -5
  39. package/esm/funcs/assetsExplicitAsset.js.map +1 -1
  40. package/esm/funcs/assetsListImages.d.ts +5 -5
  41. package/esm/funcs/assetsListImages.d.ts.map +1 -1
  42. package/esm/funcs/assetsListImages.js +1 -1
  43. package/esm/funcs/assetsListImages.js.map +1 -1
  44. package/esm/funcs/assetsListRawFiles.d.ts +5 -5
  45. package/esm/funcs/assetsListRawFiles.d.ts.map +1 -1
  46. package/esm/funcs/assetsListRawFiles.js +1 -1
  47. package/esm/funcs/assetsListRawFiles.js.map +1 -1
  48. package/esm/funcs/assetsListResourcesByAssetFolder.d.ts +3 -3
  49. package/esm/funcs/assetsListResourcesByAssetFolder.d.ts.map +1 -1
  50. package/esm/funcs/assetsListResourcesByAssetFolder.js.map +1 -1
  51. package/esm/funcs/assetsListResourcesByAssetIDs.d.ts +2 -2
  52. package/esm/funcs/assetsListResourcesByAssetIDs.d.ts.map +1 -1
  53. package/esm/funcs/assetsListResourcesByAssetIDs.js.map +1 -1
  54. package/esm/funcs/assetsListResourcesByContext.d.ts +3 -3
  55. package/esm/funcs/assetsListResourcesByContext.d.ts.map +1 -1
  56. package/esm/funcs/assetsListResourcesByContext.js.map +1 -1
  57. package/esm/funcs/assetsListResourcesByModerationKindAndStatus.d.ts +5 -4
  58. package/esm/funcs/assetsListResourcesByModerationKindAndStatus.d.ts.map +1 -1
  59. package/esm/funcs/assetsListResourcesByModerationKindAndStatus.js.map +1 -1
  60. package/esm/funcs/assetsListVideos.d.ts +5 -5
  61. package/esm/funcs/assetsListVideos.d.ts.map +1 -1
  62. package/esm/funcs/assetsListVideos.js +1 -1
  63. package/esm/funcs/assetsListVideos.js.map +1 -1
  64. package/esm/funcs/assetsRestoreResourcesByAssetIDs.d.ts +2 -2
  65. package/esm/funcs/assetsRestoreResourcesByAssetIDs.d.ts.map +1 -1
  66. package/esm/funcs/assetsRestoreResourcesByAssetIDs.js +2 -2
  67. package/esm/funcs/assetsRestoreResourcesByAssetIDs.js.map +1 -1
  68. package/esm/funcs/assetsUpdateResourceByAssetId.d.ts +1 -1
  69. package/esm/funcs/assetsUpdateResourceByAssetId.js +1 -1
  70. package/esm/funcs/backupsDeleteBackupVersions.d.ts +2 -2
  71. package/esm/funcs/backupsDeleteBackupVersions.d.ts.map +1 -1
  72. package/esm/funcs/backupsDeleteBackupVersions.js +9 -7
  73. package/esm/funcs/backupsDeleteBackupVersions.js.map +1 -1
  74. package/esm/funcs/foldersSearchFolders.d.ts +4 -2
  75. package/esm/funcs/foldersSearchFolders.d.ts.map +1 -1
  76. package/esm/funcs/foldersSearchFolders.js.map +1 -1
  77. package/esm/funcs/foldersSearchFoldersPost.d.ts +2 -2
  78. package/esm/funcs/foldersSearchFoldersPost.d.ts.map +1 -1
  79. package/esm/funcs/foldersSearchFoldersPost.js +2 -2
  80. package/esm/funcs/foldersSearchFoldersPost.js.map +1 -1
  81. package/esm/funcs/foldersUpdateFolder.d.ts +2 -2
  82. package/esm/funcs/foldersUpdateFolder.d.ts.map +1 -1
  83. package/esm/funcs/foldersUpdateFolder.js +7 -5
  84. package/esm/funcs/foldersUpdateFolder.js.map +1 -1
  85. package/esm/funcs/moderationsListResourcesByModerationKindAndStatus.d.ts +5 -4
  86. package/esm/funcs/moderationsListResourcesByModerationKindAndStatus.d.ts.map +1 -1
  87. package/esm/funcs/moderationsListResourcesByModerationKindAndStatus.js.map +1 -1
  88. package/esm/funcs/peopleListPeople.d.ts +2 -2
  89. package/esm/funcs/peopleListPeople.d.ts.map +1 -1
  90. package/esm/funcs/peopleListPeople.js.map +1 -1
  91. package/esm/funcs/peopleUpdatePerson.d.ts +2 -2
  92. package/esm/funcs/peopleUpdatePerson.d.ts.map +1 -1
  93. package/esm/funcs/peopleUpdatePerson.js +9 -7
  94. package/esm/funcs/peopleUpdatePerson.js.map +1 -1
  95. package/esm/funcs/searchVisualSearchAssets.d.ts +1 -1
  96. package/esm/funcs/searchVisualSearchAssets.js +1 -1
  97. package/esm/funcs/uploadDestroyAsset.d.ts +2 -1
  98. package/esm/funcs/uploadDestroyAsset.d.ts.map +1 -1
  99. package/esm/funcs/uploadDestroyAsset.js +7 -12
  100. package/esm/funcs/uploadDestroyAsset.js.map +1 -1
  101. package/esm/funcs/uploadText.d.ts +3 -2
  102. package/esm/funcs/uploadText.d.ts.map +1 -1
  103. package/esm/funcs/uploadText.js +7 -7
  104. package/esm/funcs/uploadText.js.map +1 -1
  105. package/esm/landing-page.js +1 -1
  106. package/esm/lib/config.d.ts +4 -4
  107. package/esm/lib/config.js +4 -4
  108. package/esm/lib/config.js.map +1 -1
  109. package/esm/lib/encodings.d.ts +1 -0
  110. package/esm/lib/encodings.d.ts.map +1 -1
  111. package/esm/lib/encodings.js +26 -5
  112. package/esm/lib/encodings.js.map +1 -1
  113. package/esm/lib/sdks.js +0 -2
  114. package/esm/lib/sdks.js.map +1 -1
  115. package/esm/lib/security.d.ts +1 -1
  116. package/esm/lib/security.d.ts.map +1 -1
  117. package/esm/lib/security.js +29 -17
  118. package/esm/lib/security.js.map +1 -1
  119. package/esm/mcp-server/apps/app-shared.d.ts +9 -0
  120. package/esm/mcp-server/apps/app-shared.d.ts.map +1 -0
  121. package/esm/mcp-server/apps/app-shared.js +2019 -0
  122. package/esm/mcp-server/apps/app-shared.js.map +1 -0
  123. package/esm/mcp-server/apps/asset-details-app.d.ts +2 -0
  124. package/esm/mcp-server/apps/asset-details-app.d.ts.map +1 -0
  125. package/esm/mcp-server/apps/asset-details-app.js +299 -0
  126. package/esm/mcp-server/apps/asset-details-app.js.map +1 -0
  127. package/esm/mcp-server/apps/asset-gallery-app.d.ts +2 -0
  128. package/esm/mcp-server/apps/asset-gallery-app.d.ts.map +1 -0
  129. package/esm/mcp-server/apps/asset-gallery-app.js +1077 -0
  130. package/esm/mcp-server/apps/asset-gallery-app.js.map +1 -0
  131. package/esm/mcp-server/apps/asset-upload-app.d.ts +2 -0
  132. package/esm/mcp-server/apps/asset-upload-app.d.ts.map +1 -0
  133. package/esm/mcp-server/apps/asset-upload-app.js +1093 -0
  134. package/esm/mcp-server/apps/asset-upload-app.js.map +1 -0
  135. package/esm/mcp-server/apps/cli-flag.d.ts +9 -0
  136. package/esm/mcp-server/apps/cli-flag.d.ts.map +1 -0
  137. package/esm/mcp-server/apps/cli-flag.js +12 -0
  138. package/esm/mcp-server/apps/cli-flag.js.map +1 -0
  139. package/esm/mcp-server/apps/config.d.ts +7 -0
  140. package/esm/mcp-server/apps/config.d.ts.map +1 -0
  141. package/esm/mcp-server/apps/config.js +42 -0
  142. package/esm/mcp-server/apps/config.js.map +1 -0
  143. package/esm/mcp-server/apps/extensions.d.ts +4 -0
  144. package/esm/mcp-server/apps/extensions.d.ts.map +1 -0
  145. package/esm/mcp-server/apps/extensions.js +83 -0
  146. package/esm/mcp-server/apps/extensions.js.map +1 -0
  147. package/esm/mcp-server/apps/tool-hooks.d.ts +2 -0
  148. package/esm/mcp-server/apps/tool-hooks.d.ts.map +1 -0
  149. package/esm/mcp-server/apps/tool-hooks.js +18 -0
  150. package/esm/mcp-server/apps/tool-hooks.js.map +1 -0
  151. package/esm/mcp-server/apps/uri.d.ts +11 -0
  152. package/esm/mcp-server/apps/uri.d.ts.map +1 -0
  153. package/esm/mcp-server/apps/uri.js +31 -0
  154. package/esm/mcp-server/apps/uri.js.map +1 -0
  155. package/esm/mcp-server/cli/serve/command.d.ts.map +1 -1
  156. package/esm/mcp-server/cli/serve/command.js +3 -1
  157. package/esm/mcp-server/cli/serve/command.js.map +1 -1
  158. package/esm/mcp-server/cli/serve/impl.d.ts.map +1 -1
  159. package/esm/mcp-server/cli/serve/impl.js +2 -0
  160. package/esm/mcp-server/cli/serve/impl.js.map +1 -1
  161. package/esm/mcp-server/cli/start/command.d.ts.map +1 -1
  162. package/esm/mcp-server/cli/start/command.js +3 -1
  163. package/esm/mcp-server/cli/start/command.js.map +1 -1
  164. package/esm/mcp-server/cli/start/impl.d.ts.map +1 -1
  165. package/esm/mcp-server/cli/start/impl.js +3 -0
  166. package/esm/mcp-server/cli/start/impl.js.map +1 -1
  167. package/esm/mcp-server/flags.d.ts +2 -0
  168. package/esm/mcp-server/flags.d.ts.map +1 -1
  169. package/esm/mcp-server/mcp-server.js +1 -1
  170. package/esm/mcp-server/server.d.ts +2 -0
  171. package/esm/mcp-server/server.d.ts.map +1 -1
  172. package/esm/mcp-server/server.extensions.d.ts +2 -1
  173. package/esm/mcp-server/server.extensions.d.ts.map +1 -1
  174. package/esm/mcp-server/server.extensions.js +3 -1
  175. package/esm/mcp-server/server.extensions.js.map +1 -1
  176. package/esm/mcp-server/server.js +3 -3
  177. package/esm/mcp-server/server.js.map +1 -1
  178. package/esm/mcp-server/tools/assetRelationsCreateAssetRelationsByAssetId.d.ts +1 -1
  179. package/esm/mcp-server/tools/assetRelationsCreateAssetRelationsByAssetId.d.ts.map +1 -1
  180. package/esm/mcp-server/tools/assetRelationsCreateAssetRelationsByAssetId.js +5 -4
  181. package/esm/mcp-server/tools/assetRelationsCreateAssetRelationsByAssetId.js.map +1 -1
  182. package/esm/mcp-server/tools/assetRelationsDeleteAssetRelationsByAssetId.d.ts +1 -1
  183. package/esm/mcp-server/tools/assetRelationsDeleteAssetRelationsByAssetId.d.ts.map +1 -1
  184. package/esm/mcp-server/tools/assetRelationsDeleteAssetRelationsByAssetId.js +5 -4
  185. package/esm/mcp-server/tools/assetRelationsDeleteAssetRelationsByAssetId.js.map +1 -1
  186. package/esm/mcp-server/tools/assetsDerivedDestroy.d.ts.map +1 -1
  187. package/esm/mcp-server/tools/assetsDerivedDestroy.js +1 -1
  188. package/esm/mcp-server/tools/assetsDerivedDestroy.js.map +1 -1
  189. package/esm/mcp-server/tools/assetsDestroyByAssetId.d.ts +1 -1
  190. package/esm/mcp-server/tools/assetsDestroyByAssetId.d.ts.map +1 -1
  191. package/esm/mcp-server/tools/assetsDestroyByAssetId.js +4 -5
  192. package/esm/mcp-server/tools/assetsDestroyByAssetId.js.map +1 -1
  193. package/esm/mcp-server/tools/assetsDownloadBackupAsset.d.ts +0 -3
  194. package/esm/mcp-server/tools/assetsDownloadBackupAsset.d.ts.map +1 -1
  195. package/esm/mcp-server/tools/assetsDownloadBackupAsset.js +2 -5
  196. package/esm/mcp-server/tools/assetsDownloadBackupAsset.js.map +1 -1
  197. package/esm/mcp-server/tools/assetsGenerateArchive.d.ts.map +1 -1
  198. package/esm/mcp-server/tools/assetsGenerateArchive.js +2 -2
  199. package/esm/mcp-server/tools/assetsGenerateArchive.js.map +1 -1
  200. package/esm/mcp-server/tools/assetsGetResourceByAssetId.d.ts.map +1 -1
  201. package/esm/mcp-server/tools/assetsGetResourceByAssetId.js +4 -0
  202. package/esm/mcp-server/tools/assetsGetResourceByAssetId.js.map +1 -1
  203. package/esm/mcp-server/tools/assetsListImages.d.ts +3 -36
  204. package/esm/mcp-server/tools/assetsListImages.d.ts.map +1 -1
  205. package/esm/mcp-server/tools/assetsListImages.js +14 -10
  206. package/esm/mcp-server/tools/assetsListImages.js.map +1 -1
  207. package/esm/mcp-server/tools/assetsListRawFiles.d.ts +3 -36
  208. package/esm/mcp-server/tools/assetsListRawFiles.d.ts.map +1 -1
  209. package/esm/mcp-server/tools/assetsListRawFiles.js +14 -10
  210. package/esm/mcp-server/tools/assetsListRawFiles.js.map +1 -1
  211. package/esm/mcp-server/tools/assetsListResourceTags.d.ts.map +1 -1
  212. package/esm/mcp-server/tools/assetsListResourceTags.js +2 -2
  213. package/esm/mcp-server/tools/assetsListResourceTags.js.map +1 -1
  214. package/esm/mcp-server/tools/assetsListVideos.d.ts +3 -36
  215. package/esm/mcp-server/tools/assetsListVideos.d.ts.map +1 -1
  216. package/esm/mcp-server/tools/assetsListVideos.js +14 -10
  217. package/esm/mcp-server/tools/assetsListVideos.js.map +1 -1
  218. package/esm/mcp-server/tools/assetsRenameAsset.d.ts.map +1 -1
  219. package/esm/mcp-server/tools/assetsRenameAsset.js +2 -2
  220. package/esm/mcp-server/tools/assetsRenameAsset.js.map +1 -1
  221. package/esm/mcp-server/tools/assetsUpdateResourceByAssetId.d.ts.map +1 -1
  222. package/esm/mcp-server/tools/assetsUpdateResourceByAssetId.js +2 -2
  223. package/esm/mcp-server/tools/assetsUpdateResourceByAssetId.js.map +1 -1
  224. package/esm/mcp-server/tools/foldersCreateFolder.d.ts.map +1 -1
  225. package/esm/mcp-server/tools/foldersCreateFolder.js +1 -1
  226. package/esm/mcp-server/tools/foldersCreateFolder.js.map +1 -1
  227. package/esm/mcp-server/tools/foldersDestroyFolder.d.ts.map +1 -1
  228. package/esm/mcp-server/tools/foldersDestroyFolder.js +1 -1
  229. package/esm/mcp-server/tools/foldersDestroyFolder.js.map +1 -1
  230. package/esm/mcp-server/tools/foldersSearchFolders.d.ts +5 -2
  231. package/esm/mcp-server/tools/foldersSearchFolders.d.ts.map +1 -1
  232. package/esm/mcp-server/tools/foldersSearchFolders.js +3 -3
  233. package/esm/mcp-server/tools/foldersSearchFolders.js.map +1 -1
  234. package/esm/mcp-server/tools/foldersUpdateFolder.d.ts +1 -1
  235. package/esm/mcp-server/tools/foldersUpdateFolder.d.ts.map +1 -1
  236. package/esm/mcp-server/tools/foldersUpdateFolder.js +4 -4
  237. package/esm/mcp-server/tools/foldersUpdateFolder.js.map +1 -1
  238. package/esm/mcp-server/tools/searchSearchAssets.d.ts.map +1 -1
  239. package/esm/mcp-server/tools/searchSearchAssets.js +5 -1
  240. package/esm/mcp-server/tools/searchSearchAssets.js.map +1 -1
  241. package/esm/mcp-server/tools/searchVisualSearchAssets.d.ts.map +1 -1
  242. package/esm/mcp-server/tools/searchVisualSearchAssets.js +2 -2
  243. package/esm/mcp-server/tools/searchVisualSearchAssets.js.map +1 -1
  244. package/esm/mcp-server/tools/uploadUpload.d.ts.map +1 -1
  245. package/esm/mcp-server/tools/uploadUpload.js +6 -7
  246. package/esm/mcp-server/tools/uploadUpload.js.map +1 -1
  247. package/esm/mcp-server/tools/usageGetUsage.d.ts.map +1 -1
  248. package/esm/mcp-server/tools/usageGetUsage.js +1 -1
  249. package/esm/mcp-server/tools/usageGetUsage.js.map +1 -1
  250. package/esm/mcp-server/tools.d.ts +4 -1
  251. package/esm/mcp-server/tools.d.ts.map +1 -1
  252. package/esm/mcp-server/tools.js +19 -10
  253. package/esm/mcp-server/tools.js.map +1 -1
  254. package/esm/models/accesscontrolitem.d.ts +12 -2
  255. package/esm/models/accesscontrolitem.d.ts.map +1 -1
  256. package/esm/models/accesscontrolitem.js +16 -2
  257. package/esm/models/accesscontrolitem.js.map +1 -1
  258. package/esm/models/assetdeliverytype.d.ts +16 -0
  259. package/esm/models/assetdeliverytype.d.ts.map +1 -0
  260. package/esm/models/assetdeliverytype.js +15 -0
  261. package/esm/models/assetdeliverytype.js.map +1 -0
  262. package/esm/models/assignfolderrolesop.d.ts.map +1 -1
  263. package/esm/models/assignfolderrolesop.js +1 -1
  264. package/esm/models/assignfolderrolesop.js.map +1 -1
  265. package/esm/models/asyncuploadresponse.d.ts +2 -2
  266. package/esm/models/asyncuploadresponse.d.ts.map +1 -1
  267. package/esm/models/asyncuploadresponse.js +2 -2
  268. package/esm/models/asyncuploadresponse.js.map +1 -1
  269. package/esm/models/backupversionfailure.d.ts +7 -0
  270. package/esm/models/backupversionfailure.d.ts.map +1 -0
  271. package/esm/models/backupversionfailure.js +11 -0
  272. package/esm/models/backupversionfailure.js.map +1 -0
  273. package/esm/models/componentsdestroyrequest.d.ts +9 -0
  274. package/esm/models/componentsdestroyrequest.d.ts.map +1 -0
  275. package/esm/models/componentsdestroyrequest.js +12 -0
  276. package/esm/models/componentsdestroyrequest.js.map +1 -0
  277. package/esm/models/componentsdestroyresponse.d.ts +22 -0
  278. package/esm/models/componentsdestroyresponse.d.ts.map +1 -0
  279. package/esm/models/componentsdestroyresponse.js +20 -0
  280. package/esm/models/componentsdestroyresponse.js.map +1 -0
  281. package/esm/models/contextfullresponse.d.ts +17 -0
  282. package/esm/models/contextfullresponse.d.ts.map +1 -0
  283. package/esm/models/contextfullresponse.js +21 -0
  284. package/esm/models/contextfullresponse.js.map +1 -0
  285. package/esm/models/coordinatesresponse.d.ts +10 -0
  286. package/esm/models/coordinatesresponse.d.ts.map +1 -0
  287. package/esm/models/coordinatesresponse.js +11 -0
  288. package/esm/models/coordinatesresponse.js.map +1 -0
  289. package/esm/models/createassetrelationsbyassetidop.d.ts +2 -5
  290. package/esm/models/createassetrelationsbyassetidop.d.ts.map +1 -1
  291. package/esm/models/createassetrelationsbyassetidop.js +3 -4
  292. package/esm/models/createassetrelationsbyassetidop.js.map +1 -1
  293. package/esm/models/createassetrelationsbypublicidop.d.ts +4 -7
  294. package/esm/models/createassetrelationsbypublicidop.d.ts.map +1 -1
  295. package/esm/models/createassetrelationsbypublicidop.js +6 -7
  296. package/esm/models/createassetrelationsbypublicidop.js.map +1 -1
  297. package/esm/models/createfolderop.d.ts +3 -11
  298. package/esm/models/createfolderop.d.ts.map +1 -1
  299. package/esm/models/createfolderop.js +4 -9
  300. package/esm/models/createfolderop.js.map +1 -1
  301. package/esm/models/createfolderresponse.d.ts +8 -0
  302. package/esm/models/createfolderresponse.d.ts.map +1 -0
  303. package/esm/models/createfolderresponse.js +12 -0
  304. package/esm/models/createfolderresponse.js.map +1 -0
  305. package/esm/models/deleteassetrelationsbyassetidop.d.ts +2 -5
  306. package/esm/models/deleteassetrelationsbyassetidop.d.ts.map +1 -1
  307. package/esm/models/deleteassetrelationsbyassetidop.js +3 -4
  308. package/esm/models/deleteassetrelationsbyassetidop.js.map +1 -1
  309. package/esm/models/deleteassetrelationsbypublicidop.d.ts +4 -7
  310. package/esm/models/deleteassetrelationsbypublicidop.d.ts.map +1 -1
  311. package/esm/models/deleteassetrelationsbypublicidop.js +5 -7
  312. package/esm/models/deleteassetrelationsbypublicidop.js.map +1 -1
  313. package/esm/models/deletebackupversionsop.d.ts +8 -31
  314. package/esm/models/deletebackupversionsop.d.ts.map +1 -1
  315. package/esm/models/deletebackupversionsop.js +9 -21
  316. package/esm/models/deletebackupversionsop.js.map +1 -1
  317. package/esm/models/deletebackupversionspartialresponse.d.ts +9 -0
  318. package/esm/models/deletebackupversionspartialresponse.d.ts.map +1 -0
  319. package/esm/models/deletebackupversionspartialresponse.js +12 -0
  320. package/esm/models/deletebackupversionspartialresponse.js.map +1 -0
  321. package/esm/models/deletebackupversionsrequest.d.ts +6 -0
  322. package/esm/models/deletebackupversionsrequest.d.ts.map +1 -0
  323. package/esm/models/deletebackupversionsrequest.js +9 -0
  324. package/esm/models/deletebackupversionsrequest.js.map +1 -0
  325. package/esm/models/deletebackupversionsresponse.d.ts +7 -0
  326. package/esm/models/deletebackupversionsresponse.d.ts.map +1 -0
  327. package/esm/models/deletebackupversionsresponse.js +10 -0
  328. package/esm/models/deletebackupversionsresponse.js.map +1 -0
  329. package/esm/models/deletefolderresponse.d.ts +6 -0
  330. package/esm/models/deletefolderresponse.d.ts.map +1 -0
  331. package/esm/models/deletefolderresponse.js +10 -0
  332. package/esm/models/deletefolderresponse.js.map +1 -0
  333. package/esm/models/deliverytype.d.ts +20 -0
  334. package/esm/models/deliverytype.d.ts.map +1 -0
  335. package/esm/models/deliverytype.js +19 -0
  336. package/esm/models/deliverytype.js.map +1 -0
  337. package/esm/models/deliverytypeall.d.ts +20 -0
  338. package/esm/models/deliverytypeall.d.ts.map +1 -0
  339. package/esm/models/deliverytypeall.js +25 -0
  340. package/esm/models/deliverytypeall.js.map +1 -0
  341. package/esm/models/destroyassetop.d.ts +14 -26
  342. package/esm/models/destroyassetop.d.ts.map +1 -1
  343. package/esm/models/destroyassetop.js +11 -18
  344. package/esm/models/destroyassetop.js.map +1 -1
  345. package/esm/models/destroybyassetidop.d.ts +2 -2
  346. package/esm/models/destroybyassetidop.d.ts.map +1 -1
  347. package/esm/models/destroybyassetidop.js +2 -2
  348. package/esm/models/destroybyassetidop.js.map +1 -1
  349. package/esm/models/destroyfolderop.d.ts +2 -8
  350. package/esm/models/destroyfolderop.d.ts.map +1 -1
  351. package/esm/models/destroyfolderop.js +3 -5
  352. package/esm/models/destroyfolderop.js.map +1 -1
  353. package/esm/models/destroyresponse.d.ts +6 -7
  354. package/esm/models/destroyresponse.d.ts.map +1 -1
  355. package/esm/models/destroyresponse.js +5 -6
  356. package/esm/models/destroyresponse.js.map +1 -1
  357. package/esm/models/directionenum.d.ts +18 -0
  358. package/esm/models/directionenum.d.ts.map +1 -0
  359. package/esm/models/directionenum.js +17 -0
  360. package/esm/models/directionenum.js.map +1 -0
  361. package/esm/models/downloadassetop.d.ts +2 -5
  362. package/esm/models/downloadassetop.d.ts.map +1 -1
  363. package/esm/models/downloadassetop.js +3 -6
  364. package/esm/models/downloadassetop.js.map +1 -1
  365. package/esm/models/downloadbackupassetop.d.ts +2 -39
  366. package/esm/models/downloadbackupassetop.d.ts.map +1 -1
  367. package/esm/models/downloadbackupassetop.js +2 -27
  368. package/esm/models/downloadbackupassetop.js.map +1 -1
  369. package/esm/models/explicitassetop.d.ts +2 -62
  370. package/esm/models/explicitassetop.d.ts.map +1 -1
  371. package/esm/models/explicitassetop.js +3 -64
  372. package/esm/models/explicitassetop.js.map +1 -1
  373. package/esm/models/explicitdeliverytype.d.ts +11 -0
  374. package/esm/models/explicitdeliverytype.d.ts.map +1 -0
  375. package/esm/models/explicitdeliverytype.js +17 -0
  376. package/esm/models/explicitdeliverytype.js.map +1 -0
  377. package/esm/models/explicitrequest.d.ts +128 -0
  378. package/esm/models/explicitrequest.d.ts.map +1 -0
  379. package/esm/models/explicitrequest.js +118 -0
  380. package/esm/models/explicitrequest.js.map +1 -0
  381. package/esm/models/exploderesourceop.d.ts +7 -27
  382. package/esm/models/exploderesourceop.d.ts.map +1 -1
  383. package/esm/models/exploderesourceop.js +6 -21
  384. package/esm/models/exploderesourceop.js.map +1 -1
  385. package/esm/models/exploderesponse.d.ts +21 -0
  386. package/esm/models/exploderesponse.d.ts.map +1 -0
  387. package/esm/models/exploderesponse.js +19 -0
  388. package/esm/models/exploderesponse.js.map +1 -0
  389. package/esm/models/fetchdeliverytype.d.ts +18 -0
  390. package/esm/models/fetchdeliverytype.d.ts.map +1 -0
  391. package/esm/models/fetchdeliverytype.js +17 -0
  392. package/esm/models/fetchdeliverytype.js.map +1 -0
  393. package/esm/models/fields.d.ts +5 -0
  394. package/esm/models/fields.d.ts.map +1 -0
  395. package/esm/models/fields.js +11 -0
  396. package/esm/models/fields.js.map +1 -0
  397. package/esm/models/foldernamepath.d.ts +7 -0
  398. package/esm/models/foldernamepath.d.ts.map +1 -0
  399. package/esm/models/foldernamepath.js +10 -0
  400. package/esm/models/foldernamepath.js.map +1 -0
  401. package/esm/models/foldersearchrequest.d.ts +12 -0
  402. package/esm/models/foldersearchrequest.d.ts.map +1 -0
  403. package/esm/models/foldersearchrequest.js +15 -0
  404. package/esm/models/foldersearchrequest.js.map +1 -0
  405. package/esm/models/generatearchiveop.d.ts +27 -34
  406. package/esm/models/generatearchiveop.d.ts.map +1 -1
  407. package/esm/models/generatearchiveop.js +31 -37
  408. package/esm/models/generatearchiveop.js.map +1 -1
  409. package/esm/models/generatearchiveresponse.d.ts +27 -0
  410. package/esm/models/generatearchiveresponse.d.ts.map +1 -0
  411. package/esm/models/generatearchiveresponse.js +30 -0
  412. package/esm/models/generatearchiveresponse.js.map +1 -0
  413. package/esm/models/generateddeliverytype.d.ts +22 -0
  414. package/esm/models/generateddeliverytype.d.ts.map +1 -0
  415. package/esm/models/generateddeliverytype.js +21 -0
  416. package/esm/models/generateddeliverytype.js.map +1 -0
  417. package/esm/models/getpersonop.d.ts +2 -9
  418. package/esm/models/getpersonop.d.ts.map +1 -1
  419. package/esm/models/getpersonop.js +2 -5
  420. package/esm/models/getpersonop.js.map +1 -1
  421. package/esm/models/getusageop.d.ts.map +1 -1
  422. package/esm/models/getusageop.js +1 -1
  423. package/esm/models/getusageop.js.map +1 -1
  424. package/esm/models/getvideoviewsop.d.ts +3 -23
  425. package/esm/models/getvideoviewsop.d.ts.map +1 -1
  426. package/esm/models/getvideoviewsop.js +2 -17
  427. package/esm/models/getvideoviewsop.js.map +1 -1
  428. package/esm/models/info.d.ts +54 -21
  429. package/esm/models/info.d.ts.map +1 -1
  430. package/esm/models/info.js +50 -23
  431. package/esm/models/info.js.map +1 -1
  432. package/esm/models/listimagesop.d.ts +6 -6
  433. package/esm/models/listimagesop.d.ts.map +1 -1
  434. package/esm/models/listimagesop.js +9 -9
  435. package/esm/models/listimagesop.js.map +1 -1
  436. package/esm/models/listpeopleop.d.ts +4 -12
  437. package/esm/models/listpeopleop.d.ts.map +1 -1
  438. package/esm/models/listpeopleop.js +4 -8
  439. package/esm/models/listpeopleop.js.map +1 -1
  440. package/esm/models/listrawfilesop.d.ts +6 -6
  441. package/esm/models/listrawfilesop.d.ts.map +1 -1
  442. package/esm/models/listrawfilesop.js +9 -9
  443. package/esm/models/listrawfilesop.js.map +1 -1
  444. package/esm/models/listresourcesbyassetfolderop.d.ts +4 -4
  445. package/esm/models/listresourcesbyassetfolderop.d.ts.map +1 -1
  446. package/esm/models/listresourcesbyassetfolderop.js +5 -5
  447. package/esm/models/listresourcesbyassetfolderop.js.map +1 -1
  448. package/esm/models/listresourcesbyassetidsop.d.ts +2 -2
  449. package/esm/models/listresourcesbyassetidsop.d.ts.map +1 -1
  450. package/esm/models/listresourcesbyassetidsop.js +3 -3
  451. package/esm/models/listresourcesbyassetidsop.js.map +1 -1
  452. package/esm/models/listresourcesbycontextop.d.ts +4 -4
  453. package/esm/models/listresourcesbycontextop.d.ts.map +1 -1
  454. package/esm/models/listresourcesbycontextop.js +5 -5
  455. package/esm/models/listresourcesbycontextop.js.map +1 -1
  456. package/esm/models/listresourcesbymoderationkindandstatusop.d.ts +7 -40
  457. package/esm/models/listresourcesbymoderationkindandstatusop.d.ts.map +1 -1
  458. package/esm/models/listresourcesbymoderationkindandstatusop.js +9 -39
  459. package/esm/models/listresourcesbymoderationkindandstatusop.js.map +1 -1
  460. package/esm/models/listresourcetagsop.d.ts +2 -9
  461. package/esm/models/listresourcetagsop.d.ts.map +1 -1
  462. package/esm/models/listresourcetagsop.js +4 -7
  463. package/esm/models/listresourcetagsop.js.map +1 -1
  464. package/esm/models/listresourcetypesop.d.ts +3 -21
  465. package/esm/models/listresourcetypesop.d.ts.map +1 -1
  466. package/esm/models/listresourcetypesop.js +3 -16
  467. package/esm/models/listresourcetypesop.js.map +1 -1
  468. package/esm/models/listvideosop.d.ts +6 -6
  469. package/esm/models/listvideosop.d.ts.map +1 -1
  470. package/esm/models/listvideosop.js +9 -9
  471. package/esm/models/listvideosop.js.map +1 -1
  472. package/esm/models/manageddeliverytype.d.ts +20 -0
  473. package/esm/models/manageddeliverytype.d.ts.map +1 -0
  474. package/esm/models/manageddeliverytype.js +19 -0
  475. package/esm/models/manageddeliverytype.js.map +1 -0
  476. package/esm/models/moderationkind.d.ts +22 -0
  477. package/esm/models/moderationkind.d.ts.map +1 -0
  478. package/esm/models/moderationkind.js +24 -0
  479. package/esm/models/moderationkind.js.map +1 -0
  480. package/esm/models/moderationstatusparameter.d.ts +18 -0
  481. package/esm/models/moderationstatusparameter.d.ts.map +1 -0
  482. package/esm/models/moderationstatusparameter.js +20 -0
  483. package/esm/models/moderationstatusparameter.js.map +1 -0
  484. package/esm/models/movefolderrequest.d.ts +9 -0
  485. package/esm/models/movefolderrequest.d.ts.map +1 -0
  486. package/esm/models/movefolderrequest.js +10 -0
  487. package/esm/models/movefolderrequest.js.map +1 -0
  488. package/esm/models/movefolderresponse.d.ts +8 -0
  489. package/esm/models/movefolderresponse.d.ts.map +1 -0
  490. package/esm/models/movefolderresponse.js +12 -0
  491. package/esm/models/movefolderresponse.js.map +1 -0
  492. package/esm/models/nonfinalchunkuploadresponse.d.ts +2 -2
  493. package/esm/models/nonfinalchunkuploadresponse.d.ts.map +1 -1
  494. package/esm/models/nonfinalchunkuploadresponse.js +2 -2
  495. package/esm/models/nonfinalchunkuploadresponse.js.map +1 -1
  496. package/esm/models/peoplelistresponse.d.ts +8 -0
  497. package/esm/models/peoplelistresponse.d.ts.map +1 -0
  498. package/esm/models/peoplelistresponse.js +12 -0
  499. package/esm/models/peoplelistresponse.js.map +1 -0
  500. package/esm/models/personresponse.d.ts +7 -0
  501. package/esm/models/personresponse.d.ts.map +1 -0
  502. package/esm/models/personresponse.js +10 -0
  503. package/esm/models/personresponse.js.map +1 -0
  504. package/esm/models/relateassetsbyassetidrequest.d.ts +9 -0
  505. package/esm/models/relateassetsbyassetidrequest.d.ts.map +1 -0
  506. package/esm/models/relateassetsbyassetidrequest.js +9 -0
  507. package/esm/models/relateassetsbyassetidrequest.js.map +1 -0
  508. package/esm/models/relateassetsbypublicidrequest.d.ts +9 -0
  509. package/esm/models/relateassetsbypublicidrequest.d.ts.map +1 -0
  510. package/esm/models/relateassetsbypublicidrequest.js +9 -0
  511. package/esm/models/relateassetsbypublicidrequest.js.map +1 -0
  512. package/esm/models/renameassetop.d.ts +8 -8
  513. package/esm/models/renameassetop.d.ts.map +1 -1
  514. package/esm/models/renameassetop.js +10 -13
  515. package/esm/models/renameassetop.js.map +1 -1
  516. package/esm/models/resourcefieldsenum.d.ts +66 -0
  517. package/esm/models/resourcefieldsenum.d.ts.map +1 -0
  518. package/esm/models/resourcefieldsenum.js +65 -0
  519. package/esm/models/resourcefieldsenum.js.map +1 -0
  520. package/esm/models/resourcetypesresponse.d.ts +18 -0
  521. package/esm/models/resourcetypesresponse.d.ts.map +1 -0
  522. package/esm/models/resourcetypesresponse.js +20 -0
  523. package/esm/models/resourcetypesresponse.js.map +1 -0
  524. package/esm/models/resourceupdaterequest.d.ts +11 -6
  525. package/esm/models/resourceupdaterequest.d.ts.map +1 -1
  526. package/esm/models/resourceupdaterequest.js +11 -8
  527. package/esm/models/resourceupdaterequest.js.map +1 -1
  528. package/esm/models/responsivebreakpoint.d.ts +11 -0
  529. package/esm/models/responsivebreakpoint.d.ts.map +1 -0
  530. package/esm/models/responsivebreakpoint.js +15 -0
  531. package/esm/models/responsivebreakpoint.js.map +1 -0
  532. package/esm/models/restorerequest.d.ts +8 -0
  533. package/esm/models/restorerequest.d.ts.map +1 -0
  534. package/esm/models/restorerequest.js +11 -0
  535. package/esm/models/restorerequest.js.map +1 -0
  536. package/esm/models/restoreresourcesbyassetidsop.d.ts +0 -6
  537. package/esm/models/restoreresourcesbyassetidsop.d.ts.map +1 -1
  538. package/esm/models/restoreresourcesbyassetidsop.js +0 -5
  539. package/esm/models/restoreresourcesbyassetidsop.js.map +1 -1
  540. package/esm/models/restoreresponseunion.d.ts +1 -1
  541. package/esm/models/searchfoldersop.d.ts +5 -9
  542. package/esm/models/searchfoldersop.d.ts.map +1 -1
  543. package/esm/models/searchfoldersop.js +3 -10
  544. package/esm/models/searchfoldersop.js.map +1 -1
  545. package/esm/models/searchfolderspostop.d.ts +0 -7
  546. package/esm/models/searchfolderspostop.d.ts.map +1 -1
  547. package/esm/models/searchfolderspostop.js +0 -6
  548. package/esm/models/searchfolderspostop.js.map +1 -1
  549. package/esm/models/searchparameters.d.ts +11 -8
  550. package/esm/models/searchparameters.d.ts.map +1 -1
  551. package/esm/models/searchparameters.js +7 -7
  552. package/esm/models/searchparameters.js.map +1 -1
  553. package/esm/models/searchresponse.d.ts +6 -29
  554. package/esm/models/searchresponse.d.ts.map +1 -1
  555. package/esm/models/searchresponse.js +4 -21
  556. package/esm/models/searchresponse.js.map +1 -1
  557. package/esm/models/showfolderop.d.ts.map +1 -1
  558. package/esm/models/showfolderop.js +1 -1
  559. package/esm/models/showfolderop.js.map +1 -1
  560. package/esm/models/{extendedstoragetype.d.ts → socialdeliverytype.d.ts} +14 -18
  561. package/esm/models/socialdeliverytype.d.ts.map +1 -0
  562. package/esm/models/{extendedstoragetype.js → socialdeliverytype.js} +14 -18
  563. package/esm/models/socialdeliverytype.js.map +1 -0
  564. package/esm/models/structuredmetadataparam.d.ts +12 -0
  565. package/esm/models/structuredmetadataparam.d.ts.map +1 -0
  566. package/esm/models/structuredmetadataparam.js +11 -0
  567. package/esm/models/structuredmetadataparam.js.map +1 -0
  568. package/esm/models/structuredmetadatavalue.d.ts +4 -0
  569. package/esm/models/structuredmetadatavalue.d.ts.map +1 -0
  570. package/esm/models/structuredmetadatavalue.js +11 -0
  571. package/esm/models/structuredmetadatavalue.js.map +1 -0
  572. package/esm/models/tagslistresponse.d.ts +7 -0
  573. package/esm/models/tagslistresponse.d.ts.map +1 -0
  574. package/esm/models/tagslistresponse.js +10 -0
  575. package/esm/models/tagslistresponse.js.map +1 -0
  576. package/esm/models/tagsparam.d.ts +7 -0
  577. package/esm/models/tagsparam.d.ts.map +1 -0
  578. package/esm/models/tagsparam.js +10 -0
  579. package/esm/models/tagsparam.js.map +1 -0
  580. package/esm/models/textop.d.ts +7 -127
  581. package/esm/models/textop.d.ts.map +1 -1
  582. package/esm/models/textop.js +8 -97
  583. package/esm/models/textop.js.map +1 -1
  584. package/esm/models/textrequest.d.ts +82 -0
  585. package/esm/models/textrequest.d.ts.map +1 -0
  586. package/esm/models/textrequest.js +68 -0
  587. package/esm/models/textrequest.js.map +1 -0
  588. package/esm/models/textresponse.d.ts +41 -0
  589. package/esm/models/textresponse.d.ts.map +1 -0
  590. package/esm/models/textresponse.js +36 -0
  591. package/esm/models/textresponse.js.map +1 -0
  592. package/esm/models/unrelateassetsbyassetidrequest.d.ts +9 -0
  593. package/esm/models/unrelateassetsbyassetidrequest.d.ts.map +1 -0
  594. package/esm/models/unrelateassetsbyassetidrequest.js +9 -0
  595. package/esm/models/unrelateassetsbyassetidrequest.js.map +1 -0
  596. package/esm/models/unrelateassetsbypublicidrequest.d.ts +9 -0
  597. package/esm/models/unrelateassetsbypublicidrequest.d.ts.map +1 -0
  598. package/esm/models/unrelateassetsbypublicidrequest.js +9 -0
  599. package/esm/models/unrelateassetsbypublicidrequest.js.map +1 -0
  600. package/esm/models/updatefolderop.d.ts +4 -24
  601. package/esm/models/updatefolderop.d.ts.map +1 -1
  602. package/esm/models/updatefolderop.js +5 -18
  603. package/esm/models/updatefolderop.js.map +1 -1
  604. package/esm/models/updatepersonop.d.ts +7 -21
  605. package/esm/models/updatepersonop.d.ts.map +1 -1
  606. package/esm/models/updatepersonop.js +6 -17
  607. package/esm/models/updatepersonop.js.map +1 -1
  608. package/esm/models/updatepersonrequest.d.ts +9 -0
  609. package/esm/models/updatepersonrequest.d.ts.map +1 -0
  610. package/esm/models/updatepersonrequest.js +13 -0
  611. package/esm/models/updatepersonrequest.js.map +1 -0
  612. package/esm/models/updatepersonresponse.d.ts +9 -0
  613. package/esm/models/updatepersonresponse.d.ts.map +1 -0
  614. package/esm/models/updatepersonresponse.js +13 -0
  615. package/esm/models/updatepersonresponse.js.map +1 -0
  616. package/esm/models/updateresourcebyassetidop.d.ts.map +1 -1
  617. package/esm/models/updateresourcebyassetidop.js +1 -1
  618. package/esm/models/updateresourcebyassetidop.js.map +1 -1
  619. package/esm/models/uploadchunkop.d.ts.map +1 -1
  620. package/esm/models/uploadchunkop.js +2 -2
  621. package/esm/models/uploadchunkop.js.map +1 -1
  622. package/esm/models/uploaddeliverytype.d.ts +9 -0
  623. package/esm/models/uploaddeliverytype.d.ts.map +1 -0
  624. package/esm/models/uploaddeliverytype.js +13 -0
  625. package/esm/models/uploaddeliverytype.js.map +1 -0
  626. package/esm/models/uploadop.d.ts.map +1 -1
  627. package/esm/models/uploadop.js +2 -2
  628. package/esm/models/uploadop.js.map +1 -1
  629. package/esm/models/uploadrequest.d.ts +69 -74
  630. package/esm/models/uploadrequest.d.ts.map +1 -1
  631. package/esm/models/uploadrequest.js +38 -47
  632. package/esm/models/uploadrequest.js.map +1 -1
  633. package/esm/models/uploadresponse.d.ts +11 -1
  634. package/esm/models/uploadresponse.d.ts.map +1 -1
  635. package/esm/models/uploadresponse.js +12 -4
  636. package/esm/models/uploadresponse.js.map +1 -1
  637. package/esm/models/videoview.d.ts +14 -0
  638. package/esm/models/videoview.d.ts.map +1 -0
  639. package/esm/models/videoview.js +17 -0
  640. package/esm/models/videoview.js.map +1 -0
  641. package/esm/models/videoviewsresponse.d.ts +9 -0
  642. package/esm/models/videoviewsresponse.d.ts.map +1 -0
  643. package/esm/models/videoviewsresponse.js +13 -0
  644. package/esm/models/videoviewsresponse.js.map +1 -0
  645. package/esm/tool-names.js +8 -8
  646. package/esm/tool-names.js.map +1 -1
  647. package/package.json +1 -1
  648. package/src/funcs/assetRelationsCreateAssetRelationsByAssetId.ts +9 -7
  649. package/src/funcs/assetRelationsCreateAssetRelationsByPublicId.ts +13 -9
  650. package/src/funcs/assetRelationsDeleteAssetRelationsByAssetId.ts +11 -7
  651. package/src/funcs/assetRelationsDeleteAssetRelationsByPublicId.ts +13 -9
  652. package/src/funcs/assetsDeleteBackupVersions.ts +12 -10
  653. package/src/funcs/assetsDestroyByAssetId.ts +8 -9
  654. package/src/funcs/assetsDownloadAsset.ts +3 -18
  655. package/src/funcs/assetsDownloadBackupAsset.ts +0 -15
  656. package/src/funcs/assetsExplicitAsset.ts +8 -6
  657. package/src/funcs/assetsListImages.ts +10 -10
  658. package/src/funcs/assetsListRawFiles.ts +10 -10
  659. package/src/funcs/assetsListResourcesByAssetFolder.ts +6 -6
  660. package/src/funcs/assetsListResourcesByAssetIDs.ts +3 -3
  661. package/src/funcs/assetsListResourcesByContext.ts +6 -6
  662. package/src/funcs/assetsListResourcesByModerationKindAndStatus.ts +10 -10
  663. package/src/funcs/assetsListVideos.ts +10 -10
  664. package/src/funcs/assetsRestoreResourcesByAssetIDs.ts +6 -6
  665. package/src/funcs/assetsUpdateResourceByAssetId.ts +1 -1
  666. package/src/funcs/backupsDeleteBackupVersions.ts +12 -10
  667. package/src/funcs/foldersSearchFolders.ts +5 -5
  668. package/src/funcs/foldersSearchFoldersPost.ts +6 -6
  669. package/src/funcs/foldersUpdateFolder.ts +8 -6
  670. package/src/funcs/moderationsListResourcesByModerationKindAndStatus.ts +10 -10
  671. package/src/funcs/peopleListPeople.ts +3 -3
  672. package/src/funcs/peopleUpdatePerson.ts +12 -10
  673. package/src/funcs/searchVisualSearchAssets.ts +1 -1
  674. package/src/funcs/uploadDestroyAsset.ts +8 -15
  675. package/src/funcs/uploadText.ts +10 -10
  676. package/src/landing-page.ts +1 -1
  677. package/src/lib/config.ts +4 -4
  678. package/src/lib/encodings.ts +32 -4
  679. package/src/lib/sdks.ts +0 -2
  680. package/src/lib/security.ts +14 -2
  681. package/src/mcp-server/apps/app-shared.ts +2030 -0
  682. package/src/mcp-server/apps/asset-details-app.ts +312 -0
  683. package/src/mcp-server/apps/asset-gallery-app.ts +1090 -0
  684. package/src/mcp-server/apps/asset-upload-app.ts +1114 -0
  685. package/src/mcp-server/apps/cli-flag.ts +14 -0
  686. package/src/mcp-server/apps/config.ts +48 -0
  687. package/src/mcp-server/apps/extensions.ts +102 -0
  688. package/src/mcp-server/apps/tool-hooks.ts +19 -0
  689. package/src/mcp-server/apps/uri.ts +38 -0
  690. package/src/mcp-server/cli/serve/command.ts +3 -1
  691. package/src/mcp-server/cli/serve/impl.ts +2 -0
  692. package/src/mcp-server/cli/start/command.ts +3 -1
  693. package/src/mcp-server/cli/start/impl.ts +3 -0
  694. package/src/mcp-server/flags.ts +2 -0
  695. package/src/mcp-server/mcp-server.ts +1 -1
  696. package/src/mcp-server/server.extensions.ts +8 -1
  697. package/src/mcp-server/server.ts +5 -2
  698. package/src/mcp-server/tools/assetRelationsCreateAssetRelationsByAssetId.ts +5 -4
  699. package/src/mcp-server/tools/assetRelationsDeleteAssetRelationsByAssetId.ts +5 -4
  700. package/src/mcp-server/tools/assetsDerivedDestroy.ts +3 -1
  701. package/src/mcp-server/tools/assetsDestroyByAssetId.ts +6 -5
  702. package/src/mcp-server/tools/assetsDownloadBackupAsset.ts +1 -13
  703. package/src/mcp-server/tools/assetsGenerateArchive.ts +4 -2
  704. package/src/mcp-server/tools/assetsGetResourceByAssetId.ts +4 -0
  705. package/src/mcp-server/tools/assetsListImages.ts +21 -13
  706. package/src/mcp-server/tools/assetsListRawFiles.ts +21 -13
  707. package/src/mcp-server/tools/assetsListResourceTags.ts +4 -2
  708. package/src/mcp-server/tools/assetsListVideos.ts +21 -13
  709. package/src/mcp-server/tools/assetsRenameAsset.ts +6 -2
  710. package/src/mcp-server/tools/assetsUpdateResourceByAssetId.ts +4 -2
  711. package/src/mcp-server/tools/foldersCreateFolder.ts +3 -1
  712. package/src/mcp-server/tools/foldersDestroyFolder.ts +3 -1
  713. package/src/mcp-server/tools/foldersSearchFolders.ts +6 -6
  714. package/src/mcp-server/tools/foldersUpdateFolder.ts +8 -4
  715. package/src/mcp-server/tools/searchSearchAssets.ts +5 -1
  716. package/src/mcp-server/tools/searchVisualSearchAssets.ts +4 -2
  717. package/src/mcp-server/tools/uploadUpload.ts +8 -7
  718. package/src/mcp-server/tools/usageGetUsage.ts +3 -1
  719. package/src/mcp-server/tools.ts +22 -10
  720. package/src/models/accesscontrolitem.ts +36 -6
  721. package/src/models/assetdeliverytype.ts +22 -0
  722. package/src/models/assignfolderrolesop.ts +3 -1
  723. package/src/models/asyncuploadresponse.ts +8 -3
  724. package/src/models/backupversionfailure.ts +21 -0
  725. package/src/models/componentsdestroyrequest.ts +28 -0
  726. package/src/models/componentsdestroyresponse.ts +38 -0
  727. package/src/models/contextfullresponse.ts +42 -0
  728. package/src/models/coordinatesresponse.ts +24 -0
  729. package/src/models/createassetrelationsbyassetidop.ts +7 -14
  730. package/src/models/createassetrelationsbypublicidop.ts +13 -23
  731. package/src/models/createfolderop.ts +14 -26
  732. package/src/models/createfolderresponse.ts +21 -0
  733. package/src/models/deleteassetrelationsbyassetidop.ts +7 -14
  734. package/src/models/deleteassetrelationsbypublicidop.ts +14 -22
  735. package/src/models/deletebackupversionsop.ts +25 -74
  736. package/src/models/deletebackupversionspartialresponse.ts +28 -0
  737. package/src/models/deletebackupversionsrequest.ts +16 -0
  738. package/src/models/deletebackupversionsresponse.ts +20 -0
  739. package/src/models/deletefolderresponse.ts +13 -0
  740. package/src/models/deliverytype.ts +28 -0
  741. package/src/models/deliverytypeall.ts +56 -0
  742. package/src/models/destroyassetop.ts +41 -41
  743. package/src/models/destroybyassetidop.ts +5 -5
  744. package/src/models/destroyfolderop.ts +9 -14
  745. package/src/models/destroyresponse.ts +9 -13
  746. package/src/models/directionenum.ts +24 -0
  747. package/src/models/downloadassetop.ts +10 -17
  748. package/src/models/downloadbackupassetop.ts +4 -91
  749. package/src/models/explicitassetop.ts +10 -208
  750. package/src/models/explicitdeliverytype.ts +39 -0
  751. package/src/models/explicitrequest.ts +383 -0
  752. package/src/models/exploderesourceop.ts +20 -52
  753. package/src/models/exploderesponse.ts +34 -0
  754. package/src/models/fetchdeliverytype.ts +26 -0
  755. package/src/models/fields.ts +17 -0
  756. package/src/models/foldernamepath.ts +13 -0
  757. package/src/models/foldersearchrequest.ts +31 -0
  758. package/src/models/generatearchiveop.ts +67 -118
  759. package/src/models/generatearchiveresponse.ts +100 -0
  760. package/src/models/generateddeliverytype.ts +28 -0
  761. package/src/models/getpersonop.ts +3 -15
  762. package/src/models/getusageop.ts +3 -1
  763. package/src/models/getvideoviewsop.ts +6 -63
  764. package/src/models/info.ts +127 -46
  765. package/src/models/listimagesop.ts +22 -18
  766. package/src/models/listpeopleop.ts +8 -27
  767. package/src/models/listrawfilesop.ts +22 -18
  768. package/src/models/listresourcesbyassetfolderop.ts +11 -7
  769. package/src/models/listresourcesbyassetidsop.ts +6 -4
  770. package/src/models/listresourcesbycontextop.ts +13 -7
  771. package/src/models/listresourcesbymoderationkindandstatusop.ts +25 -53
  772. package/src/models/listresourcetagsop.ts +10 -19
  773. package/src/models/listresourcetypesop.ts +10 -38
  774. package/src/models/listvideosop.ts +22 -18
  775. package/src/models/manageddeliverytype.ts +28 -0
  776. package/src/models/moderationkind.ts +28 -0
  777. package/src/models/moderationstatusparameter.ts +26 -0
  778. package/src/models/movefolderrequest.ts +16 -0
  779. package/src/models/movefolderresponse.ts +15 -0
  780. package/src/models/nonfinalchunkuploadresponse.ts +7 -4
  781. package/src/models/peoplelistresponse.ts +22 -0
  782. package/src/models/personresponse.ts +15 -0
  783. package/src/models/relateassetsbyassetidrequest.ts +19 -0
  784. package/src/models/relateassetsbypublicidrequest.ts +19 -0
  785. package/src/models/renameassetop.ts +30 -32
  786. package/src/models/resourcefieldsenum.ts +72 -0
  787. package/src/models/resourcetypesresponse.ts +32 -0
  788. package/src/models/resourceupdaterequest.ts +25 -16
  789. package/src/models/responsivebreakpoint.ts +37 -0
  790. package/src/models/restorerequest.ts +24 -0
  791. package/src/models/restoreresourcesbyassetidsop.ts +0 -20
  792. package/src/models/searchfoldersop.ts +8 -26
  793. package/src/models/searchfolderspostop.ts +0 -24
  794. package/src/models/searchparameters.ts +13 -13
  795. package/src/models/searchresponse.ts +11 -38
  796. package/src/models/showfolderop.ts +3 -1
  797. package/src/models/socialdeliverytype.ts +44 -0
  798. package/src/models/structuredmetadataparam.ts +28 -0
  799. package/src/models/structuredmetadatavalue.ts +16 -0
  800. package/src/models/tagslistresponse.ts +18 -0
  801. package/src/models/tagsparam.ts +16 -0
  802. package/src/models/textop.ts +17 -251
  803. package/src/models/textrequest.ts +125 -0
  804. package/src/models/textresponse.ts +113 -0
  805. package/src/models/unrelateassetsbyassetidrequest.ts +21 -0
  806. package/src/models/unrelateassetsbypublicidrequest.ts +21 -0
  807. package/src/models/updatefolderop.ts +17 -39
  808. package/src/models/updatepersonop.ts +23 -49
  809. package/src/models/updatepersonrequest.ts +26 -0
  810. package/src/models/updatepersonresponse.ts +24 -0
  811. package/src/models/updateresourcebyassetidop.ts +3 -1
  812. package/src/models/uploadchunkop.ts +4 -2
  813. package/src/models/uploaddeliverytype.ts +25 -0
  814. package/src/models/uploadop.ts +4 -2
  815. package/src/models/uploadrequest.ts +144 -126
  816. package/src/models/uploadresponse.ts +38 -6
  817. package/src/models/videoview.ts +48 -0
  818. package/src/models/videoviewsresponse.ts +22 -0
  819. package/src/tool-names.ts +8 -8
  820. package/esm/funcs/assetsDeleteResourcesByPublicId.d.ts +0 -18
  821. package/esm/funcs/assetsDeleteResourcesByPublicId.d.ts.map +0 -1
  822. package/esm/funcs/assetsDeleteResourcesByPublicId.js +0 -104
  823. package/esm/funcs/assetsDeleteResourcesByPublicId.js.map +0 -1
  824. package/esm/funcs/assetsGetResourceByPublicId.d.ts +0 -17
  825. package/esm/funcs/assetsGetResourceByPublicId.d.ts.map +0 -1
  826. package/esm/funcs/assetsGetResourceByPublicId.js +0 -130
  827. package/esm/funcs/assetsGetResourceByPublicId.js.map +0 -1
  828. package/esm/funcs/assetsUpdateResourceByPublicId.d.ts +0 -18
  829. package/esm/funcs/assetsUpdateResourceByPublicId.d.ts.map +0 -1
  830. package/esm/funcs/assetsUpdateResourceByPublicId.js +0 -109
  831. package/esm/funcs/assetsUpdateResourceByPublicId.js.map +0 -1
  832. package/esm/models/archivestoragetype.d.ts +0 -22
  833. package/esm/models/archivestoragetype.d.ts.map +0 -1
  834. package/esm/models/archivestoragetype.js +0 -21
  835. package/esm/models/archivestoragetype.js.map +0 -1
  836. package/esm/models/deleteresourcebypublicidsrequestunion.d.ts +0 -89
  837. package/esm/models/deleteresourcebypublicidsrequestunion.d.ts.map +0 -1
  838. package/esm/models/deleteresourcebypublicidsrequestunion.js +0 -83
  839. package/esm/models/deleteresourcebypublicidsrequestunion.js.map +0 -1
  840. package/esm/models/deleteresourcesbypublicidop.d.ts +0 -23
  841. package/esm/models/deleteresourcesbypublicidop.d.ts.map +0 -1
  842. package/esm/models/deleteresourcesbypublicidop.js +0 -24
  843. package/esm/models/deleteresourcesbypublicidop.js.map +0 -1
  844. package/esm/models/destroyrequest.d.ts +0 -12
  845. package/esm/models/destroyrequest.d.ts.map +0 -1
  846. package/esm/models/destroyrequest.js +0 -15
  847. package/esm/models/destroyrequest.js.map +0 -1
  848. package/esm/models/direction.d.ts +0 -12
  849. package/esm/models/direction.d.ts.map +0 -1
  850. package/esm/models/direction.js +0 -14
  851. package/esm/models/direction.js.map +0 -1
  852. package/esm/models/extendedstoragetype.d.ts.map +0 -1
  853. package/esm/models/extendedstoragetype.js.map +0 -1
  854. package/esm/models/fieldsspec.d.ts +0 -60
  855. package/esm/models/fieldsspec.d.ts.map +0 -1
  856. package/esm/models/fieldsspec.js +0 -62
  857. package/esm/models/fieldsspec.js.map +0 -1
  858. package/esm/models/getresourcebypublicidop.d.ts +0 -29
  859. package/esm/models/getresourcebypublicidop.d.ts.map +0 -1
  860. package/esm/models/getresourcebypublicidop.js +0 -34
  861. package/esm/models/getresourcebypublicidop.js.map +0 -1
  862. package/esm/models/liststoragetype.d.ts +0 -24
  863. package/esm/models/liststoragetype.d.ts.map +0 -1
  864. package/esm/models/liststoragetype.js +0 -23
  865. package/esm/models/liststoragetype.js.map +0 -1
  866. package/esm/models/parametersdirection.d.ts +0 -18
  867. package/esm/models/parametersdirection.d.ts.map +0 -1
  868. package/esm/models/parametersdirection.js +0 -17
  869. package/esm/models/parametersdirection.js.map +0 -1
  870. package/esm/models/searchsortpair.d.ts +0 -12
  871. package/esm/models/searchsortpair.d.ts.map +0 -1
  872. package/esm/models/searchsortpair.js +0 -14
  873. package/esm/models/searchsortpair.js.map +0 -1
  874. package/esm/models/storagetype.d.ts +0 -20
  875. package/esm/models/storagetype.d.ts.map +0 -1
  876. package/esm/models/storagetype.js +0 -19
  877. package/esm/models/storagetype.js.map +0 -1
  878. package/esm/models/storagetypeparameter.d.ts +0 -20
  879. package/esm/models/storagetypeparameter.d.ts.map +0 -1
  880. package/esm/models/storagetypeparameter.js +0 -19
  881. package/esm/models/storagetypeparameter.js.map +0 -1
  882. package/esm/models/updateresourcebypublicidop.d.ts +0 -20
  883. package/esm/models/updateresourcebypublicidop.d.ts.map +0 -1
  884. package/esm/models/updateresourcebypublicidop.js +0 -25
  885. package/esm/models/updateresourcebypublicidop.js.map +0 -1
  886. package/src/funcs/assetsDeleteResourcesByPublicId.ts +0 -181
  887. package/src/funcs/assetsGetResourceByPublicId.ts +0 -239
  888. package/src/funcs/assetsUpdateResourceByPublicId.ts +0 -189
  889. package/src/models/archivestoragetype.ts +0 -28
  890. package/src/models/deleteresourcebypublicidsrequestunion.ts +0 -212
  891. package/src/models/deleteresourcesbypublicidop.ts +0 -64
  892. package/src/models/destroyrequest.ts +0 -38
  893. package/src/models/direction.ts +0 -18
  894. package/src/models/extendedstoragetype.ts +0 -48
  895. package/src/models/fieldsspec.ts +0 -66
  896. package/src/models/getresourcebypublicidop.ts +0 -91
  897. package/src/models/liststoragetype.ts +0 -30
  898. package/src/models/parametersdirection.ts +0 -24
  899. package/src/models/searchsortpair.ts +0 -18
  900. package/src/models/storagetype.ts +0 -26
  901. package/src/models/storagetypeparameter.ts +0 -26
  902. package/src/models/updateresourcebypublicidop.ts +0 -55
@@ -0,0 +1,1114 @@
1
+ /*
2
+ * MCP App for uploading assets to Cloudinary.
3
+ * Attached to the upload-asset tool.
4
+ *
5
+ * Features:
6
+ * - Schema-driven form: fields are auto-generated from the Zod schema
7
+ * at build time via z.toJSONSchema(), grouped into collapsible sections.
8
+ * - Staged upload: file/URL is staged first with an explicit Upload button.
9
+ * - File prepopulation: display_name, format, resource_type inferred from
10
+ * the staged file metadata.
11
+ * - Folder picker: combobox with search-folders tool for autocomplete.
12
+ *
13
+ * Shares CLDS tokens, MCPApp client, helpers, and detail renderers
14
+ * with the gallery/details apps via app-shared.ts.
15
+ */
16
+
17
+ import { toJSONSchema } from "zod";
18
+ import {
19
+ SHARED_CSS_TOKENS,
20
+ SHARED_CSS_COMPONENTS,
21
+ SHARED_JS_MCP_CLIENT,
22
+ SHARED_JS_HELPERS,
23
+ SHARED_JS_TOOLTIPS,
24
+ SHARED_JS_MODAL,
25
+ SHARED_JS_DETAIL_RENDERERS,
26
+ SHARED_JS_HOST_CONTEXT,
27
+ } from "./app-shared.js";
28
+ import { UploadRequest$zodSchema } from "../../models/uploadrequest.js";
29
+ import { UploadResourceType$zodSchema } from "../../models/uploadresourcetype.js";
30
+ import { injectToolName } from "./uri.js";
31
+
32
+ export function getAssetUploadHtml(toolName?: string): string {
33
+ return injectToolName(ASSET_UPLOAD_HTML, toolName);
34
+ }
35
+
36
+ // ── Build-time schema generation ────────────────────────────────────
37
+ const uploadJsonSchema = toJSONSchema(UploadRequest$zodSchema) as {
38
+ properties: Record<string, unknown>;
39
+ };
40
+ const rtJsonSchema = toJSONSchema(UploadResourceType$zodSchema) as Record<
41
+ string,
42
+ unknown
43
+ >;
44
+
45
+ const allSchemaProperties: Record<string, unknown> = {
46
+ ...(uploadJsonSchema.properties || {}),
47
+ };
48
+ const rtCopy = { ...rtJsonSchema };
49
+ delete rtCopy["$schema"];
50
+ allSchemaProperties["resource_type"] = rtCopy;
51
+
52
+ const SCHEMA_JSON = JSON.stringify(allSchemaProperties);
53
+
54
+ // ── CSS ─────────────────────────────────────────────────────────────
55
+ const UPLOAD_CSS = /* css */ `
56
+ .upload-header {
57
+ display: flex; align-items: center; gap: 10px;
58
+ margin-bottom: var(--cld-sp-md); padding-bottom: var(--cld-sp-sm);
59
+ border-bottom: 1px solid var(--cld-border);
60
+ }
61
+ .upload-header h1 {
62
+ font-size: var(--cld-font-sm); font-weight: 600; color: var(--cld-text);
63
+ }
64
+ .upload-header-icon { font-size: 20px; }
65
+ .upload-header { position: relative; }
66
+ .back-link {
67
+ position: absolute; top: -2px; right: 0;
68
+ background: none; border: none; cursor: pointer;
69
+ color: var(--cld-accent); font-size: var(--cld-font-xs);
70
+ padding: 2px 6px; border-radius: 4px;
71
+ }
72
+ .back-link:hover { text-decoration: underline; background: var(--cld-accent-bg); }
73
+
74
+ .upload-result .detail-section { padding: 14px 16px; }
75
+ .upload-result .detail-section:first-child { padding-top: 0; }
76
+
77
+ .upload-another {
78
+ margin-top: 16px; text-align: center;
79
+ }
80
+ `;
81
+
82
+ // ── JS ──────────────────────────────────────────────────────────────
83
+ const UPLOAD_JS = /* js */ `
84
+ var LOG_PREFIX = "[upload]";
85
+ var MIN_HEIGHT = 120;
86
+ var UPLOAD_TOOL_TIMEOUT_MS = 120000;
87
+
88
+ /* ── Schema & config (generated at build time) ── */
89
+ var UPLOAD_SCHEMA = ${SCHEMA_JSON};
90
+
91
+ var FIELD_CONFIG = {
92
+ exclude: ["file", "api_key", "signature", "timestamp", "callback",
93
+ "eval", "on_success"],
94
+ sections: [
95
+ { id: "basic", label: "Basic", open: true,
96
+ fields: ["display_name", "format", "asset_folder", "tags"] },
97
+ { id: "naming", label: "Naming & Behavior",
98
+ fields: ["public_id", "context", "use_filename", "unique_filename",
99
+ "overwrite", "use_filename_as_display_name",
100
+ "unique_display_name", "public_id_prefix",
101
+ "use_asset_folder_as_public_id_prefix",
102
+ "filename_override", "discard_original_filename",
103
+ "backup", "allowed_formats", "invalidate",
104
+ "metadata", "folder"] },
105
+ { id: "delivery", label: "Delivery & Access",
106
+ fields: ["resource_type", "type", "access_mode", "access_control",
107
+ "upload_preset", "headers", "return_delete_token"] },
108
+ { id: "transforms", label: "Transformations",
109
+ fields: ["transformation", "eager", "eager_async",
110
+ "eager_notification_url", "responsive_breakpoints"] },
111
+ { id: "ai", label: "AI & Analysis",
112
+ fields: ["moderation", "detection", "ocr", "auto_tagging",
113
+ "background_removal", "categorization", "raw_convert",
114
+ "auto_transcription", "auto_chaptering",
115
+ "media_metadata", "quality_analysis", "accessibility_analysis",
116
+ "cinemagraph_analysis", "colors", "faces", "phash",
117
+ "visual_search"] }
118
+ ]
119
+ };
120
+
121
+ /* ── State ── */
122
+ var pendingCall = { name: null, args: null };
123
+ var capturedArgs = {};
124
+ var state = "idle";
125
+ var uploadOrigin = "user";
126
+ var pendingLocalFile = null;
127
+ var stagedFile = null;
128
+ var lastResult = null;
129
+ var folderCache = [];
130
+ var folderDebounce = null;
131
+
132
+ var app = new MCPApp({ name: "Cloudinary Upload", version: "1.0.0" });
133
+ setupHostContext(app);
134
+
135
+ /* ── Schema helpers ── */
136
+ function humanize(key) {
137
+ return key.replace(/_/g, " ").replace(/\\b[a-z]/g, function(c) {
138
+ return c.toUpperCase();
139
+ });
140
+ }
141
+
142
+ function getFieldType(prop) {
143
+ if (!prop) return "text";
144
+ if (prop.enum) return "select";
145
+ if (prop.type === "boolean") return "checkbox";
146
+ if (prop.type === "number" || prop.type === "integer") return "number";
147
+ if (prop.type === "string") return "text";
148
+ if (prop.type === "array") return "textarea";
149
+ if (prop.anyOf || prop.oneOf) {
150
+ var subs = prop.anyOf || prop.oneOf;
151
+ for (var i = 0; i < subs.length; i++) {
152
+ if (subs[i].type === "boolean") return "checkbox";
153
+ }
154
+ return "textarea";
155
+ }
156
+ return "text";
157
+ }
158
+
159
+ function shortDesc(desc) {
160
+ if (!desc) return "";
161
+ var first = desc.split("\\n")[0];
162
+ return first.length > 120 ? first.substring(0, 117) + "..." : first;
163
+ }
164
+
165
+ /* ── Field renderers ── */
166
+ function helpIcon(desc) {
167
+ if (!desc) return "";
168
+ return ' <span class="help-toggle" tabindex="0">?<span class="help-bubble">' + esc(shortDesc(desc)) + "</span></span>";
169
+ }
170
+
171
+ function renderField(key, prop) {
172
+ var id = "f-" + key;
173
+ var label = humanize(key);
174
+ var ft = getFieldType(prop);
175
+ var desc = (prop && prop.description) || "";
176
+ var val = capturedArgs[key];
177
+
178
+ var h = "";
179
+
180
+ if (ft === "checkbox") {
181
+ var checked = val != null ? !!val : (prop.default === true);
182
+ h += '<div class="upload-field upload-field-check">';
183
+ h += "<label>";
184
+ h += '<input id="' + id + '" type="checkbox"' + (checked ? " checked" : "") + ">";
185
+ h += "<span>" + esc(label) + "</span>";
186
+ h += "</label>" + helpIcon(desc) + "</div>";
187
+ } else if (ft === "select") {
188
+ h += '<div class="upload-field">';
189
+ h += '<label for="' + id + '">' + esc(label) + helpIcon(desc) + "</label>";
190
+ h += '<select id="' + id + '">';
191
+ h += '<option value="">(default)</option>';
192
+ var opts = prop.enum || [];
193
+ for (var i = 0; i < opts.length; i++) {
194
+ var sel = val === opts[i] ? " selected" : "";
195
+ h += '<option value="' + esc(opts[i]) + '"' + sel + ">" + esc(opts[i]) + "</option>";
196
+ }
197
+ h += "</select></div>";
198
+ } else if (ft === "number") {
199
+ h += '<div class="upload-field">';
200
+ h += '<label for="' + id + '">' + esc(label) + helpIcon(desc) + "</label>";
201
+ h += '<input id="' + id + '" type="number" step="any" value="' + esc(val != null ? String(val) : "") + '">';
202
+ h += "</div>";
203
+ } else if (ft === "textarea") {
204
+ var tv = val != null ? (typeof val === "string" ? val : JSON.stringify(val, null, 2)) : "";
205
+ h += '<div class="upload-field full-width">';
206
+ h += '<label for="' + id + '">' + esc(label) + helpIcon(desc) + "</label>";
207
+ h += '<textarea id="' + id + '" rows="2" placeholder="JSON or text">' + esc(tv) + "</textarea>";
208
+ h += "</div>";
209
+ } else {
210
+ h += '<div class="upload-field">';
211
+ h += '<label for="' + id + '">' + esc(label) + helpIcon(desc) + "</label>";
212
+ h += '<input id="' + id + '" type="text" value="' + esc(val != null ? String(val) : "") + '">';
213
+ h += "</div>";
214
+ }
215
+ return h;
216
+ }
217
+
218
+ function renderFolderField(prop) {
219
+ var id = "f-asset_folder";
220
+ var val = capturedArgs.asset_folder || "";
221
+ var desc = (prop && prop.description) || "";
222
+ var h = '<div class="upload-field" id="folder-field-wrap">';
223
+ h += '<label for="' + id + '">Asset Folder' + helpIcon(desc) + "</label>";
224
+ h += '<div class="combo-wrap">';
225
+ h += '<input id="' + id + '" type="text" value="' + esc(val) + '" autocomplete="off" placeholder="Type to search or create...">';
226
+ h += '<div class="combo-dropdown" id="folder-dropdown"></div>';
227
+ h += "</div></div>";
228
+ return h;
229
+ }
230
+
231
+ function renderFormSections() {
232
+ var h = "";
233
+ var rendered = {};
234
+ var sections = FIELD_CONFIG.sections;
235
+
236
+ for (var s = 0; s < sections.length; s++) {
237
+ var sec = sections[s];
238
+ var fieldsHtml = "";
239
+
240
+ for (var f = 0; f < sec.fields.length; f++) {
241
+ var key = sec.fields[f];
242
+ if (FIELD_CONFIG.exclude.indexOf(key) >= 0) continue;
243
+ var prop = UPLOAD_SCHEMA[key];
244
+ if (!prop) continue;
245
+
246
+ if (key === "asset_folder") {
247
+ fieldsHtml += renderFolderField(prop);
248
+ } else {
249
+ fieldsHtml += renderField(key, prop);
250
+ }
251
+ rendered[key] = true;
252
+ }
253
+ if (!fieldsHtml) continue;
254
+
255
+ if (sec.open) {
256
+ h += '<div class="upload-form">' + fieldsHtml + "</div>";
257
+ } else {
258
+ h += '<details class="upload-section">';
259
+ h += "<summary>" + esc(sec.label) + "</summary>";
260
+ h += '<div class="upload-form">' + fieldsHtml + "</div>";
261
+ h += "</details>";
262
+ }
263
+ }
264
+
265
+ var otherHtml = "";
266
+ var allKeys = Object.keys(UPLOAD_SCHEMA);
267
+ for (var k = 0; k < allKeys.length; k++) {
268
+ var okey = allKeys[k];
269
+ if (rendered[okey] || FIELD_CONFIG.exclude.indexOf(okey) >= 0) continue;
270
+ otherHtml += renderField(okey, UPLOAD_SCHEMA[okey]);
271
+ rendered[okey] = true;
272
+ }
273
+ if (otherHtml) {
274
+ h += '<details class="upload-section">';
275
+ h += "<summary>Other</summary>";
276
+ h += '<div class="upload-form">' + otherHtml + "</div>";
277
+ h += "</details>";
278
+ }
279
+
280
+ return h;
281
+ }
282
+
283
+ /* ── Dynamic form collection ── */
284
+ function collectFormArgs() {
285
+ var allKeys = Object.keys(UPLOAD_SCHEMA);
286
+ for (var i = 0; i < allKeys.length; i++) {
287
+ var key = allKeys[i];
288
+ if (FIELD_CONFIG.exclude.indexOf(key) >= 0) continue;
289
+ var prop = UPLOAD_SCHEMA[key];
290
+ var ft = getFieldType(prop);
291
+ var el = document.getElementById("f-" + key);
292
+ if (!el) continue;
293
+
294
+ if (ft === "checkbox") {
295
+ if (el.checked) capturedArgs[key] = true;
296
+ else delete capturedArgs[key];
297
+ } else if (ft === "number") {
298
+ var n = parseFloat(el.value);
299
+ if (!isNaN(n)) capturedArgs[key] = n;
300
+ else delete capturedArgs[key];
301
+ } else if (ft === "textarea") {
302
+ var tv = el.value.trim();
303
+ if (tv) {
304
+ try { capturedArgs[key] = JSON.parse(tv); }
305
+ catch (e) { capturedArgs[key] = tv; }
306
+ } else { delete capturedArgs[key]; }
307
+ } else {
308
+ var sv = (ft === "select") ? el.value : el.value.trim();
309
+ if (sv) capturedArgs[key] = sv;
310
+ else delete capturedArgs[key];
311
+ }
312
+ }
313
+ }
314
+
315
+ /* ── Extract args from tool input ── */
316
+ function extractUploadArgs(args) {
317
+ if (!args) return {};
318
+ var out = {};
319
+ if (args.resource_type) out.resource_type = args.resource_type;
320
+ var ua = args.upload_request || {};
321
+ var schemaKeys = Object.keys(UPLOAD_SCHEMA);
322
+ for (var i = 0; i < schemaKeys.length; i++) {
323
+ var k = schemaKeys[i];
324
+ if (k === "resource_type") continue;
325
+ if (ua[k] !== undefined && ua[k] !== null && ua[k] !== "") out[k] = ua[k];
326
+ }
327
+ return out;
328
+ }
329
+
330
+ /* ── File prepopulation ── */
331
+ var prevStagedName = "";
332
+
333
+ function prepopulateFromFile(file) {
334
+ var name = file.name || "";
335
+ var dot = name.lastIndexOf(".");
336
+ var base = dot > 0 ? name.substring(0, dot) : name;
337
+ var ext = dot > 0 ? name.substring(dot + 1).toLowerCase() : "";
338
+ var mime = (file.type || "").toLowerCase();
339
+
340
+ var canOverwrite = !capturedArgs.display_name || capturedArgs.display_name === prevStagedName;
341
+ if (base && canOverwrite) capturedArgs.display_name = base;
342
+ capturedArgs.format = ext || undefined;
343
+ if (!ext) delete capturedArgs.format;
344
+ prevStagedName = base;
345
+
346
+ if (mime.startsWith("image/")) capturedArgs.resource_type = "image";
347
+ else if (mime.startsWith("video/") || mime.startsWith("audio/")) capturedArgs.resource_type = "video";
348
+ else if (mime === "application/pdf") capturedArgs.resource_type = "image";
349
+ else capturedArgs.resource_type = "auto";
350
+ }
351
+
352
+ function prepopulateFromUrl(url) {
353
+ var path = url.split("?")[0].split("/").pop() || "";
354
+ var decoded = "";
355
+ try { decoded = decodeURIComponent(path); } catch (e) { decoded = path; }
356
+ var dot = decoded.lastIndexOf(".");
357
+ var base = dot > 0 ? decoded.substring(0, dot) : decoded;
358
+ var ext = dot > 0 ? decoded.substring(dot + 1).toLowerCase() : "";
359
+
360
+ var canOverwrite = !capturedArgs.display_name || capturedArgs.display_name === prevStagedName;
361
+ if (base && canOverwrite) capturedArgs.display_name = base;
362
+ capturedArgs.format = ext || undefined;
363
+ if (!ext) delete capturedArgs.format;
364
+ prevStagedName = base;
365
+ }
366
+
367
+ /* ── Folder picker ── */
368
+ var folderHighlight = -1;
369
+
370
+ function setupFolderPicker() {
371
+ var input = document.getElementById("f-asset_folder");
372
+ if (!input) return;
373
+
374
+ input.addEventListener("focus", function() {
375
+ fetchFolders("");
376
+ });
377
+
378
+ input.addEventListener("input", function() {
379
+ clearTimeout(folderDebounce);
380
+ folderHighlight = -1;
381
+ var q = input.value.trim();
382
+ folderDebounce = setTimeout(function() { fetchFolders(q); }, 300);
383
+ });
384
+
385
+ input.addEventListener("blur", function() {
386
+ setTimeout(hideFolderDropdown, 200);
387
+ });
388
+
389
+ input.addEventListener("keydown", function(e) {
390
+ var dropdown = document.getElementById("folder-dropdown");
391
+ if (!dropdown || dropdown.style.display === "none") return;
392
+ var items = dropdown.querySelectorAll(".combo-item");
393
+ if (!items.length) return;
394
+
395
+ if (e.key === "ArrowDown") {
396
+ e.preventDefault();
397
+ folderHighlight = Math.min(folderHighlight + 1, items.length - 1);
398
+ updateFolderHighlight(items);
399
+ } else if (e.key === "ArrowUp") {
400
+ e.preventDefault();
401
+ folderHighlight = Math.max(folderHighlight - 1, 0);
402
+ updateFolderHighlight(items);
403
+ } else if (e.key === "Enter" && folderHighlight >= 0 && items[folderHighlight]) {
404
+ e.preventDefault();
405
+ input.value = items[folderHighlight].dataset.value || "";
406
+ hideFolderDropdown();
407
+ } else if (e.key === "Escape") {
408
+ hideFolderDropdown();
409
+ }
410
+ });
411
+ }
412
+
413
+ function updateFolderHighlight(items) {
414
+ for (var i = 0; i < items.length; i++) {
415
+ items[i].classList.toggle("combo-item-active", i === folderHighlight);
416
+ }
417
+ if (items[folderHighlight]) {
418
+ items[folderHighlight].scrollIntoView({ block: "nearest" });
419
+ }
420
+ }
421
+
422
+ function fetchFolders(query) {
423
+ var args = { max_results: 50 };
424
+ if (query) args.expression = "name:" + query + "*";
425
+ app.callServerTool({ name: "search-folders", arguments: args })
426
+ .then(function(res) {
427
+ var data = ingestResult(res);
428
+ folderCache = (data && data.folders) || [];
429
+ folderHighlight = -1;
430
+ renderFolderDropdown();
431
+ })
432
+ .catch(function(err) {
433
+ console.warn(LOG_PREFIX, "folder search failed:", err);
434
+ folderCache = [];
435
+ });
436
+ }
437
+
438
+ function renderFolderDropdown() {
439
+ var dropdown = document.getElementById("folder-dropdown");
440
+ var input = document.getElementById("f-asset_folder");
441
+ if (!dropdown || !input) return;
442
+
443
+ var query = input.value.trim().toLowerCase();
444
+ var filtered = folderCache;
445
+ if (query) {
446
+ filtered = folderCache.filter(function(f) {
447
+ return (f.path || f.name || "").toLowerCase().indexOf(query) >= 0;
448
+ });
449
+ }
450
+
451
+ if (filtered.length === 0) {
452
+ dropdown.style.display = "none";
453
+ return;
454
+ }
455
+
456
+ var h = "";
457
+ for (var i = 0; i < Math.min(filtered.length, 30); i++) {
458
+ var fp = filtered[i].path || filtered[i].name || "";
459
+ h += '<div class="combo-item" data-value="' + esc(fp) + '">' + esc(fp) + "</div>";
460
+ }
461
+ dropdown.innerHTML = h;
462
+ dropdown.style.display = "block";
463
+
464
+ dropdown.onclick = function(e) {
465
+ var item = e.target;
466
+ while (item && !item.classList.contains("combo-item")) item = item.parentElement;
467
+ if (item && item.dataset.value != null) {
468
+ input.value = item.dataset.value;
469
+ dropdown.style.display = "none";
470
+ }
471
+ };
472
+ }
473
+
474
+ function hideFolderDropdown() {
475
+ var dd = document.getElementById("folder-dropdown");
476
+ if (dd) dd.style.display = "none";
477
+ }
478
+
479
+ /* ── Staging ── */
480
+ function stageLocalFile(file) {
481
+ collectFormArgs();
482
+ var reader = new FileReader();
483
+ reader.onload = function() {
484
+ stagedFile = { dataUri: reader.result, name: file.name, size: file.size, mime: file.type };
485
+ prepopulateFromFile(file);
486
+ renderPicker();
487
+ };
488
+ reader.onerror = function() {
489
+ showError("Read Error", "Could not read the selected file.");
490
+ };
491
+ reader.readAsDataURL(file);
492
+ }
493
+
494
+ function stageUrl(url) {
495
+ collectFormArgs();
496
+ var parts = url.split("?")[0].split("/");
497
+ var fname = parts[parts.length - 1] || url;
498
+ try { fname = decodeURIComponent(fname); } catch (e) {}
499
+ stagedFile = { url: url, name: fname };
500
+ prepopulateFromUrl(url);
501
+ renderPicker();
502
+ }
503
+
504
+ /* ── Main render: picker ── */
505
+ function renderPicker() {
506
+ state = "idle";
507
+ var root = document.getElementById("app");
508
+ var h = "";
509
+
510
+ h += '<div class="upload-header">';
511
+ if (lastResult) {
512
+ h += '<button class="back-link" id="back-to-result-btn">\\u2190 Back to Result</button>';
513
+ }
514
+ h += '<span class="upload-header-icon">\\u2B06\\uFE0F</span>';
515
+ h += "<h1>Upload to Cloudinary</h1>";
516
+ h += "</div>";
517
+
518
+ if (stagedFile) {
519
+ h += '<div class="upload-staged">';
520
+ h += '<div class="upload-staged-icon">\\u{1F4C4}</div>';
521
+ h += '<div class="upload-staged-info">';
522
+ h += '<div class="upload-staged-name">' + esc(stagedFile.name) + "</div>";
523
+ if (stagedFile.size) {
524
+ h += '<div class="upload-staged-meta">' + fmtBytes(stagedFile.size);
525
+ if (stagedFile.mime) h += " \\u00B7 " + esc(stagedFile.mime);
526
+ h += "</div>";
527
+ } else if (stagedFile.url) {
528
+ h += '<div class="upload-staged-meta">Remote URL</div>';
529
+ }
530
+ h += "</div>";
531
+ h += '<button class="upload-staged-clear" id="clear-staged-btn" title="Remove">\\u2715</button>';
532
+ h += "</div>";
533
+ } else {
534
+ h += '<div class="upload-zone" id="drop-zone">';
535
+ h += '<div class="upload-zone-icon">\\u{1F4C1}</div>';
536
+ h += '<div class="upload-zone-text">Drag & drop a file here</div>';
537
+ h += '<div class="upload-zone-hint">Images, videos, PDFs, and other files up to 60 MB</div>';
538
+ h += '<button class="upload-zone-btn" id="browse-btn">Browse Files</button>';
539
+ h += '<input type="file" id="file-input" style="display:none">';
540
+ h += "</div>";
541
+
542
+ h += '<div class="upload-or">or upload from URL</div>';
543
+
544
+ h += '<div class="upload-url-row">';
545
+ h += '<input class="upload-url-input" id="url-input" type="text" placeholder="https://example.com/image.jpg">';
546
+ h += '<button class="upload-url-btn" id="url-btn">Add URL</button>';
547
+ h += "</div>";
548
+ }
549
+
550
+ h += renderFormSections();
551
+
552
+ if (stagedFile) {
553
+ h += '<div class="upload-submit">';
554
+ h += '<button class="prompt-btn prompt-btn-primary upload-submit-btn" id="upload-btn">Upload to Cloudinary</button>';
555
+ h += "</div>";
556
+ }
557
+
558
+ root.innerHTML = h;
559
+
560
+ var backBtn = document.getElementById("back-to-result-btn");
561
+ if (backBtn && lastResult) {
562
+ backBtn.addEventListener("click", function() { renderResult(lastResult); });
563
+ }
564
+
565
+ if (stagedFile) {
566
+ document.getElementById("clear-staged-btn").addEventListener("click", function() {
567
+ collectFormArgs();
568
+ stagedFile = null;
569
+ if (capturedArgs.display_name === prevStagedName) delete capturedArgs.display_name;
570
+ delete capturedArgs.format;
571
+ delete capturedArgs.resource_type;
572
+ prevStagedName = "";
573
+ renderPicker();
574
+ });
575
+ document.getElementById("upload-btn").addEventListener("click", function() {
576
+ collectFormArgs();
577
+ uploadOrigin = "user";
578
+ var fileData = stagedFile.dataUri || stagedFile.url;
579
+ renderUploading(stagedFile.name, stagedFile.size ? fmtBytes(stagedFile.size) : "Remote URL");
580
+ doUpload(fileData, stagedFile.name);
581
+ });
582
+ } else {
583
+ setupDropZone();
584
+ }
585
+
586
+ setupFolderPicker();
587
+ }
588
+
589
+ /* ── Drop zone events ── */
590
+ function setupDropZone() {
591
+ var zone = document.getElementById("drop-zone");
592
+ var input = document.getElementById("file-input");
593
+ var browseBtn = document.getElementById("browse-btn");
594
+ var urlBtn = document.getElementById("url-btn");
595
+ var urlInput = document.getElementById("url-input");
596
+ if (!zone) return;
597
+
598
+ browseBtn.addEventListener("click", function(e) {
599
+ e.stopPropagation();
600
+ input.click();
601
+ });
602
+ zone.addEventListener("click", function() { input.click(); });
603
+
604
+ input.addEventListener("change", function() {
605
+ if (input.files && input.files.length) stageLocalFile(input.files[0]);
606
+ });
607
+
608
+ zone.addEventListener("dragenter", function(e) { e.preventDefault(); zone.classList.add("dragover"); });
609
+ zone.addEventListener("dragover", function(e) { e.preventDefault(); zone.classList.add("dragover"); });
610
+ zone.addEventListener("dragleave", function(e) { e.preventDefault(); zone.classList.remove("dragover"); });
611
+ zone.addEventListener("drop", function(e) {
612
+ e.preventDefault();
613
+ zone.classList.remove("dragover");
614
+ if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length) {
615
+ stageLocalFile(e.dataTransfer.files[0]);
616
+ }
617
+ });
618
+
619
+ urlBtn.addEventListener("click", function() {
620
+ var url = urlInput.value.trim();
621
+ if (url) stageUrl(url);
622
+ });
623
+ urlInput.addEventListener("keydown", function(e) {
624
+ if (e.key === "Enter") {
625
+ var url = urlInput.value.trim();
626
+ if (url) stageUrl(url);
627
+ }
628
+ });
629
+ }
630
+
631
+ /* ── Uploading state ── */
632
+ function renderUploading(name, meta) {
633
+ state = "uploading";
634
+ var root = document.getElementById("app");
635
+ var h = "";
636
+
637
+ h += '<div class="upload-header">';
638
+ h += '<span class="upload-header-icon">\\u2B06\\uFE0F</span>';
639
+ h += "<h1>Uploading\\u2026</h1>";
640
+ h += "</div>";
641
+
642
+ h += '<div class="upload-preview">';
643
+ h += '<div class="upload-preview-icon">\\u{1F4C4}</div>';
644
+ h += '<div class="upload-preview-info">';
645
+ h += '<div class="upload-preview-name">' + esc(name) + "</div>";
646
+ h += '<div class="upload-preview-meta">' + esc(meta) + "</div>";
647
+ h += "</div></div>";
648
+
649
+ h += '<div class="upload-progress-wrap">';
650
+ h += '<div class="upload-progress-bar"><div class="upload-progress-fill" id="progress-fill"></div></div>';
651
+ h += '<div class="upload-progress-text" id="progress-text">Uploading to Cloudinary\\u2026</div>';
652
+ h += "</div>";
653
+
654
+ root.innerHTML = h;
655
+ animateProgress();
656
+ }
657
+
658
+ var progressInterval = null;
659
+ function animateProgress() {
660
+ clearInterval(progressInterval);
661
+ var fill = document.getElementById("progress-fill");
662
+ if (!fill) return;
663
+ var pct = 0;
664
+ progressInterval = setInterval(function() {
665
+ if (pct < 90) {
666
+ pct += (90 - pct) * 0.08;
667
+ fill.style.width = pct + "%";
668
+ }
669
+ }, 200);
670
+ }
671
+
672
+ function stopProgress(success) {
673
+ clearInterval(progressInterval);
674
+ var fill = document.getElementById("progress-fill");
675
+ var text = document.getElementById("progress-text");
676
+ if (fill) fill.style.width = "100%";
677
+ if (text) text.textContent = success ? "Upload complete" : "Upload failed";
678
+ }
679
+
680
+ function formatErrorMsg(msg) {
681
+ var idx = msg.indexOf("[");
682
+ if (idx !== -1 && msg.indexOf("Invalid arguments") !== -1) {
683
+ try {
684
+ var issues = JSON.parse(msg.substring(idx));
685
+ return issues.map(function(i) {
686
+ var field = (i.path || []).join(".");
687
+ return (field ? field + ": " : "") + (i.message || "invalid");
688
+ }).join("\\n");
689
+ } catch (e) {}
690
+ }
691
+ if (typeof msg === "string" && msg.length > 200) {
692
+ var short = msg.replace(/\\s+/g, " ").substring(0, 200) + "\\u2026";
693
+ return short;
694
+ }
695
+ return msg;
696
+ }
697
+
698
+ function renderUploadError(title, msg) {
699
+ msg = formatErrorMsg(msg);
700
+ state = "error";
701
+ stopProgress(false);
702
+
703
+ var wrap = document.querySelector(".upload-progress-wrap");
704
+ if (wrap) {
705
+ var header = document.querySelector(".upload-header h1");
706
+ if (header) header.textContent = title;
707
+ var icon = document.querySelector(".upload-header-icon");
708
+ if (icon) icon.textContent = "\\u26A0\\uFE0F";
709
+
710
+ var safeMsg = esc(msg).replace(/\\n/g, "<br>");
711
+ var h = '<div class="upload-error-msg">' + safeMsg + "</div>";
712
+ h += '<div class="upload-another" style="margin-top:14px">';
713
+ h += '<button class="prompt-btn prompt-btn-primary" id="retry-upload-btn">Try from App</button>';
714
+ h += "</div>";
715
+ wrap.innerHTML = h;
716
+ } else {
717
+ var root = document.getElementById("app");
718
+ var safeMsg = esc(msg).replace(/\\n/g, "<br>");
719
+ var h = '<div class="upload-header">';
720
+ h += '<span class="upload-header-icon">\\u26A0\\uFE0F</span>';
721
+ h += "<h1>" + esc(title) + "</h1>";
722
+ h += "</div>";
723
+ h += '<div class="upload-error-msg">' + safeMsg + "</div>";
724
+ h += '<div class="upload-another" style="margin-top:14px;text-align:center">';
725
+ h += '<button class="prompt-btn prompt-btn-primary" id="retry-upload-btn">Try from App</button>';
726
+ h += "</div>";
727
+ root.innerHTML = h;
728
+ }
729
+
730
+ var btn = document.getElementById("retry-upload-btn");
731
+ if (btn) btn.addEventListener("click", function() {
732
+ uploadOrigin = "user";
733
+ renderPicker();
734
+ });
735
+ }
736
+
737
+ function extractPathFromError(errMsg) {
738
+ if (!errMsg) return "";
739
+ var m = errMsg.match(/open '([^']+)'/);
740
+ if (m) return m[1];
741
+ m = errMsg.match(/read file: ([^.]+)/);
742
+ if (m) return m[1].trim();
743
+ return "";
744
+ }
745
+
746
+ function classifyFileError(errMsg) {
747
+ var lower = (errMsg || "").toLowerCase();
748
+ if (lower.indexOf("enoent") >= 0 || lower.indexOf("no such file") >= 0) {
749
+ return {
750
+ title: "File Not Found",
751
+ desc: "could not be found at the specified path.",
752
+ hint: "If the server is running remotely, it cannot access files on your device. Drop the file below or click Browse to select it."
753
+ };
754
+ }
755
+ if (lower.indexOf("eacces") >= 0 || lower.indexOf("eperm") >= 0 || lower.indexOf("permission") >= 0) {
756
+ return {
757
+ title: "File Access Denied",
758
+ desc: "could not be read due to insufficient permissions."
759
+ };
760
+ }
761
+ return {
762
+ title: "File Not Accessible",
763
+ desc: "couldn\\u2019t be read from the given path."
764
+ };
765
+ }
766
+
767
+ function renderLocalFileNeeded(expectedName, errMsg) {
768
+ state = "localFileNeeded";
769
+ var classified = classifyFileError(errMsg);
770
+ var root = document.getElementById("app");
771
+ var h = '<div class="upload-header">';
772
+ h += '<span class="upload-header-icon">\\u{1F4C1}</span>';
773
+ h += "<h1>" + esc(classified.title) + "</h1>";
774
+ h += "</div>";
775
+ h += '<div class="prompt" style="margin-bottom:16px">';
776
+ h += '<div class="prompt-desc">The file <strong>' + esc(expectedName)
777
+ + "</strong> " + classified.desc
778
+ + " Please select it from your device.</div>";
779
+ if (classified.hint) {
780
+ h += '<div style="margin-top:8px;font-size:11.5px;color:var(--cld-text3);">' + esc(classified.hint) + "</div>";
781
+ }
782
+ var filePath = extractPathFromError(errMsg);
783
+ if (filePath) {
784
+ h += '<div style="margin-top:6px;font-size:11px;color:var(--cld-text3);word-break:break-all;">Path: ' + esc(filePath) + "</div>";
785
+ }
786
+ h += "</div>";
787
+ h += '<div class="upload-zone" id="drop-zone">';
788
+ h += '<div class="upload-zone-icon">\\u{1F4C1}</div>';
789
+ h += '<div class="upload-zone-text">Drop <strong>' + esc(expectedName) + "</strong> here</div>";
790
+ h += '<div class="upload-zone-hint">Or click to browse your files</div>';
791
+ h += '<button class="upload-zone-btn" id="browse-btn">Browse Files</button>';
792
+ h += '<input type="file" id="file-input" style="display:none">';
793
+ h += "</div>";
794
+ root.innerHTML = h;
795
+
796
+ function onFileSelected(file) {
797
+ var reader = new FileReader();
798
+ reader.onload = function() {
799
+ prepopulateFromFile(file);
800
+ renderUploading(file.name, fmtBytes(file.size));
801
+ doUpload(reader.result, file.name);
802
+ };
803
+ reader.onerror = function() {
804
+ showError("Read Error", "Could not read the selected file.");
805
+ };
806
+ reader.readAsDataURL(file);
807
+ }
808
+
809
+ var zone = document.getElementById("drop-zone");
810
+ var input = document.getElementById("file-input");
811
+ var browseBtn = document.getElementById("browse-btn");
812
+
813
+ browseBtn.addEventListener("click", function(e) { e.stopPropagation(); input.click(); });
814
+ zone.addEventListener("click", function() { input.click(); });
815
+ input.addEventListener("change", function() {
816
+ if (input.files && input.files.length) onFileSelected(input.files[0]);
817
+ });
818
+ zone.addEventListener("dragenter", function(e) { e.preventDefault(); zone.classList.add("dragover"); });
819
+ zone.addEventListener("dragover", function(e) { e.preventDefault(); zone.classList.add("dragover"); });
820
+ zone.addEventListener("dragleave", function(e) { e.preventDefault(); zone.classList.remove("dragover"); });
821
+ zone.addEventListener("drop", function(e) {
822
+ e.preventDefault(); zone.classList.remove("dragover");
823
+ if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length) {
824
+ onFileSelected(e.dataTransfer.files[0]);
825
+ }
826
+ });
827
+ }
828
+
829
+ /* ── Upload logic ── */
830
+ async function doUpload(fileData, displayHint) {
831
+ var uploadRequest = {};
832
+ var resourceType = "auto";
833
+
834
+ var keys = Object.keys(capturedArgs);
835
+ for (var i = 0; i < keys.length; i++) {
836
+ var k = keys[i];
837
+ if (k === "resource_type") {
838
+ resourceType = capturedArgs[k] || "auto";
839
+ } else {
840
+ uploadRequest[k] = capturedArgs[k];
841
+ }
842
+ }
843
+ uploadRequest.file = fileData;
844
+
845
+ if (pendingCall.args && pendingCall.args.resource_type) {
846
+ resourceType = pendingCall.args.resource_type;
847
+ }
848
+
849
+ console.log(LOG_PREFIX, "tools/call -> upload-asset");
850
+ try {
851
+ var res = await app.callServerTool({
852
+ name: "upload-asset",
853
+ arguments: { resource_type: resourceType, upload_request: uploadRequest },
854
+ });
855
+ var data = ingestResult(res);
856
+ console.log(LOG_PREFIX, "upload result:", JSON.stringify(data).substring(0, 300));
857
+ if (data && !data._truncated && !data.error && (data.public_id || data.asset_id || data.status === "pending")) {
858
+ stopProgress(true);
859
+ stagedFile = null;
860
+ if (uploadOrigin === "host") {
861
+ try {
862
+ app._rpc("ui/updateModelContext", {
863
+ content: [{ type: "text", text: "File uploaded successfully via app. public_id: " + data.public_id + ", secure_url: " + (data.secure_url || data.url || "") }]
864
+ });
865
+ } catch (e) { console.warn(LOG_PREFIX, "updateModelContext failed:", e); }
866
+ }
867
+ setTimeout(function() { renderResult(data); }, 300);
868
+ } else if (data && data.error) {
869
+ stopProgress(false);
870
+ var msg = typeof data.error === "object" ? (data.error.message || JSON.stringify(data.error)) : String(data.error);
871
+ if (uploadOrigin === "host") { renderUploadError("Upload Failed", msg); }
872
+ else { showError("Upload Failed", formatErrorMsg(msg)); renderPicker(); }
873
+ } else if (data && data._error) {
874
+ stopProgress(false);
875
+ var srvMsg = data._message || "Server returned an error.";
876
+ if (uploadOrigin === "host") { renderUploadError("Upload Failed", srvMsg); }
877
+ else { showError("Upload Failed", formatErrorMsg(srvMsg)); renderPicker(); }
878
+ } else {
879
+ stopProgress(false);
880
+ var fallbackMsg = "Unexpected response from server.";
881
+ if (data && data._message) fallbackMsg = data._message;
882
+ else if (data && data.message) fallbackMsg = typeof data.message === "string" ? data.message : JSON.stringify(data.message);
883
+ else if (data) try { var snap = JSON.stringify(data).substring(0, 200); if (snap !== "{}") fallbackMsg = snap; } catch(e) {}
884
+ if (uploadOrigin === "host") { renderUploadError("Upload Failed", fallbackMsg); }
885
+ else { showError("Upload Failed", fallbackMsg); renderPicker(); }
886
+ }
887
+ } catch (e) {
888
+ stopProgress(false);
889
+ var errMsg = e && e.message ? e.message : String(e);
890
+ if (uploadOrigin === "host") { renderUploadError("Upload Failed", errMsg); }
891
+ else { showError("Upload Failed", errMsg); renderPicker(); }
892
+ }
893
+ }
894
+
895
+ /* ── Result view ── */
896
+ function renderResult(r) {
897
+ state = "result";
898
+ lastResult = r;
899
+ var root = document.getElementById("app");
900
+ var url = r.secure_url || r.url || "";
901
+ var name = r.display_name || r.public_id || "Asset";
902
+ var isPending = r.status === "pending" && !r.public_id;
903
+
904
+ var h = "";
905
+
906
+ h += '<div class="upload-header">';
907
+ h += '<span class="upload-header-icon">' + (isPending ? "\\u23F3" : "\\u2705") + '</span>';
908
+ h += "<h1>" + (isPending ? "Upload Queued" : "Upload Complete") + "</h1>";
909
+ h += "</div>";
910
+
911
+ h += '<div class="upload-result">';
912
+
913
+ if (isPending) {
914
+ h += '<div class="upload-result-body">';
915
+ h += '<div class="upload-result-title"><span class="success-icon">\\u2713</span> Upload accepted (async)</div>';
916
+ h += '<div class="detail-section"><div class="prompt-desc">The file has been queued for processing. It will be available shortly.</div>';
917
+ if (r.batch_id) h += '<div style="margin-top:8px;font-size:11px;color:var(--cld-text3);">Batch: ' + esc(r.batch_id) + "</div>";
918
+ h += "</div>";
919
+ } else {
920
+ h += '<div class="upload-result-hero">';
921
+ h += renderHeroPreview(r);
922
+ h += "</div>";
923
+
924
+ h += '<div class="upload-result-body">';
925
+ h += '<div class="upload-result-title"><span class="success-icon">\\u2713</span> ' + esc(name) + "</div>";
926
+
927
+ h += sectionStart("asset_info");
928
+ h += '<summary class="detail-section-title">Asset Info</summary>';
929
+ h += renderAssetGrid(r);
930
+ h += "</details>";
931
+
932
+ h += renderAudioInfo(r);
933
+ h += renderVideoInfo(r);
934
+ }
935
+
936
+ if (!isPending) {
937
+ if (r.tags && r.tags.length) {
938
+ h += renderTags(r.tags);
939
+ }
940
+
941
+ h += renderContext(r.context);
942
+ h += renderImageMetadata(r.image_metadata || r.media_metadata);
943
+ h += renderColors(r.colors, r.predominant);
944
+ h += renderModerationSection(r.moderation, r.moderation_kind, r.moderation_status);
945
+ h += renderAccessControl(r.access_control);
946
+ h += renderCoordinates(r.faces, r.coordinates);
947
+ h += renderLastUpdated(r.last_updated);
948
+ h += renderMetadata(r.metadata);
949
+ h += renderInfo(r.info);
950
+ h += renderDerived(r.derived, r.derived_next_cursor, r.asset_id);
951
+ h += renderDerivatives(r.derivatives);
952
+ h += renderRelatedAssets(r.related_assets);
953
+ h += renderVersions(r.versions);
954
+ h += renderEager(r.eager);
955
+ h += renderQualityAnalysis(r.quality_analysis, r.quality_score);
956
+ h += renderAccessibilityAnalysis(r.accessibility_analysis);
957
+ h += renderExtraFields(r);
958
+ h += renderRawResponse(r);
959
+ }
960
+
961
+ h += '<div class="upload-actions">';
962
+ if (url) h += '<button class="prompt-btn prompt-btn-primary" id="open-url-btn">Open in Browser</button>';
963
+ h += '<button class="prompt-btn" id="upload-another-btn">Upload Another</button>';
964
+ h += "</div>";
965
+
966
+ h += "</div></div>";
967
+
968
+ root.innerHTML = h;
969
+
970
+ root.addEventListener("click", function handler(e) {
971
+ var el = e.target;
972
+ while (el && el !== root) {
973
+ if (el.id === "open-url-btn") {
974
+ app._rpc("ui/open-link", { url: url });
975
+ return;
976
+ }
977
+ if (el.id === "upload-another-btn") {
978
+ capturedArgs = {};
979
+ stagedFile = null;
980
+ prevStagedName = "";
981
+ renderPicker();
982
+ return;
983
+ }
984
+ if (el.id === "load-more-derived-btn") {
985
+ loadMoreDerived(el);
986
+ return;
987
+ }
988
+ if (el.classList && el.classList.contains("link-val") && el.dataset.url) {
989
+ app._rpc("ui/open-link", { url: el.dataset.url });
990
+ return;
991
+ }
992
+ el = el.parentElement;
993
+ }
994
+ });
995
+ }
996
+
997
+ /* ── MCP event handlers ── */
998
+ app.ontoolinput = function(params) {
999
+ pendingCall.name = "upload-asset";
1000
+ if (params.arguments) {
1001
+ pendingCall.args = params.arguments;
1002
+ capturedArgs = extractUploadArgs(params.arguments);
1003
+
1004
+ var req = params.arguments.upload_request || params.arguments || {};
1005
+ var file = req.file || "";
1006
+ if (file) {
1007
+ uploadOrigin = "host";
1008
+ var hint = req.display_name || "";
1009
+ if (!hint && file.indexOf("://") !== -1) {
1010
+ var parts = file.split("?")[0].split("/");
1011
+ hint = parts[parts.length - 1] || file;
1012
+ try { hint = decodeURIComponent(hint); } catch (e) {}
1013
+ }
1014
+ if (!hint) hint = "File";
1015
+ pendingLocalFile = (file.indexOf("file://") === 0) ? hint : null;
1016
+ renderUploading(hint, "Uploading via server\u2026");
1017
+ }
1018
+ }
1019
+ };
1020
+
1021
+ app.ontoolcancelled = function(params) {
1022
+ console.log(LOG_PREFIX, "tool cancelled:", params && params.reason);
1023
+ stopProgress(false);
1024
+ pendingLocalFile = null;
1025
+ var root = document.getElementById("app");
1026
+ var h = '<div class="prompt" style="padding:32px 24px">';
1027
+ h += '<div style="font-size:14px;font-weight:600;color:var(--cld-text);margin-bottom:4px">Upload Cancelled</div>';
1028
+ h += renderParamsList(pendingCall.args);
1029
+ h += '<div class="prompt-actions" style="margin-top:14px">';
1030
+ h += '<button class="prompt-btn prompt-btn-primary" id="cancelled-retry-btn">Upload from App</button>';
1031
+ h += '</div>';
1032
+ h += '</div>';
1033
+ root.innerHTML = h;
1034
+ document.getElementById("cancelled-retry-btn").addEventListener("click", function() {
1035
+ stagedFile = null; capturedArgs = {}; prevStagedName = ""; state = "idle";
1036
+ renderPicker();
1037
+ });
1038
+ requestAnimationFrame(function() { app.reportSize(document.documentElement.scrollHeight); });
1039
+ };
1040
+
1041
+ app.ontoolresult = function(result) {
1042
+ stopProgress(false);
1043
+ var data = ingestResult(result);
1044
+
1045
+ if (data && !data._truncated && !data._error && !data._parseError && !data.error && (data.public_id || data.asset_id || data.status === "pending")) {
1046
+ stopProgress(true);
1047
+ pendingLocalFile = null;
1048
+ console.log(LOG_PREFIX, "host upload result:", data.public_id || data.status);
1049
+ renderResult(data);
1050
+ return;
1051
+ }
1052
+
1053
+ var errMsg = "Upload failed";
1054
+ if (data) {
1055
+ if (data.error) {
1056
+ var raw = data.error;
1057
+ if (typeof raw === "object") errMsg = raw.message || raw.error || JSON.stringify(raw);
1058
+ else errMsg = String(raw);
1059
+ } else if (data._message) {
1060
+ errMsg = String(data._message);
1061
+ }
1062
+ console.warn(LOG_PREFIX, "host upload error:", errMsg);
1063
+ } else {
1064
+ console.warn(LOG_PREFIX, "host result unusable, data:", data);
1065
+ }
1066
+
1067
+ if (pendingLocalFile) {
1068
+ var localName = pendingLocalFile;
1069
+ pendingLocalFile = null;
1070
+ console.log(LOG_PREFIX, "file:// upload failed, showing local file picker for:", localName);
1071
+ renderLocalFileNeeded(localName, errMsg);
1072
+ } else if (uploadOrigin === "host") {
1073
+ renderUploadError("Upload Failed", errMsg);
1074
+ } else {
1075
+ renderUploadError("Upload Failed", errMsg);
1076
+ }
1077
+ };
1078
+
1079
+ app.connect().then(function() {
1080
+ console.log(LOG_PREFIX, "ready, state=" + state);
1081
+ setupResize(app, MIN_HEIGHT);
1082
+ if (state === "idle") renderPicker();
1083
+ }).catch(function(err) {
1084
+ showError("Connection Failed", err && err.message ? err.message : String(err));
1085
+ });
1086
+ `;
1087
+
1088
+ // ── HTML template ───────────────────────────────────────────────────
1089
+ const ASSET_UPLOAD_HTML = /* html */ `<!DOCTYPE html>
1090
+ <html lang="en">
1091
+ <head>
1092
+ <meta charset="UTF-8">
1093
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
1094
+ <title>Cloudinary Upload</title>
1095
+ <style>
1096
+ ${SHARED_CSS_TOKENS}
1097
+ ${SHARED_CSS_COMPONENTS}
1098
+ ${UPLOAD_CSS}
1099
+ </style>
1100
+ </head>
1101
+ <body>
1102
+ <div id="app"><div class="status">Preparing upload&hellip;</div></div>
1103
+
1104
+ <script>
1105
+ ${SHARED_JS_MCP_CLIENT}
1106
+ ${SHARED_JS_HELPERS}
1107
+ ${SHARED_JS_TOOLTIPS}
1108
+ ${SHARED_JS_MODAL}
1109
+ ${SHARED_JS_DETAIL_RENDERERS}
1110
+ ${SHARED_JS_HOST_CONTEXT}
1111
+ ${UPLOAD_JS}
1112
+ </script>
1113
+ </body>
1114
+ </html>`;