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