convex-cms 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/dist/cli/commands/admin.d.ts +16 -0
  2. package/dist/cli/commands/admin.d.ts.map +1 -0
  3. package/dist/cli/commands/admin.js +88 -0
  4. package/dist/cli/commands/admin.js.map +1 -0
  5. package/dist/cli/index.d.ts +3 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +18 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/cli/utils/detectConvexUrl.d.ts +13 -0
  10. package/dist/cli/utils/detectConvexUrl.d.ts.map +1 -0
  11. package/dist/cli/utils/detectConvexUrl.js +48 -0
  12. package/dist/cli/utils/detectConvexUrl.js.map +1 -0
  13. package/dist/cli/utils/openBrowser.d.ts +7 -0
  14. package/dist/cli/utils/openBrowser.d.ts.map +1 -0
  15. package/dist/cli/utils/openBrowser.js +17 -0
  16. package/dist/cli/utils/openBrowser.js.map +1 -0
  17. package/dist/client/admin-config.d.ts +126 -0
  18. package/dist/client/admin-config.d.ts.map +1 -0
  19. package/dist/client/admin-config.js +117 -0
  20. package/dist/client/admin-config.js.map +1 -0
  21. package/dist/client/adminApi.d.ts +2273 -0
  22. package/dist/client/adminApi.d.ts.map +1 -0
  23. package/dist/client/adminApi.js +716 -0
  24. package/dist/client/adminApi.js.map +1 -0
  25. package/dist/client/agentTools.d.ts +933 -0
  26. package/dist/client/agentTools.d.ts.map +1 -0
  27. package/dist/client/agentTools.js +1004 -0
  28. package/dist/client/agentTools.js.map +1 -0
  29. package/dist/client/argTypes.d.ts +212 -0
  30. package/dist/client/argTypes.d.ts.map +1 -0
  31. package/dist/client/argTypes.js +5 -0
  32. package/dist/client/argTypes.js.map +1 -0
  33. package/dist/client/field-types.d.ts +55 -0
  34. package/dist/client/field-types.d.ts.map +1 -0
  35. package/dist/client/field-types.js +152 -0
  36. package/dist/client/field-types.js.map +1 -0
  37. package/dist/client/index.d.ts +189 -0
  38. package/dist/client/index.d.ts.map +1 -0
  39. package/dist/client/index.js +668 -0
  40. package/dist/client/index.js.map +1 -0
  41. package/dist/client/queryBuilder.d.ts +765 -0
  42. package/dist/client/queryBuilder.d.ts.map +1 -0
  43. package/dist/client/queryBuilder.js +970 -0
  44. package/dist/client/queryBuilder.js.map +1 -0
  45. package/dist/client/schema/codegen.d.ts +128 -0
  46. package/dist/client/schema/codegen.d.ts.map +1 -0
  47. package/dist/client/schema/codegen.js +318 -0
  48. package/dist/client/schema/codegen.js.map +1 -0
  49. package/dist/client/schema/defineContentType.d.ts +221 -0
  50. package/dist/client/schema/defineContentType.d.ts.map +1 -0
  51. package/dist/client/schema/defineContentType.js +380 -0
  52. package/dist/client/schema/defineContentType.js.map +1 -0
  53. package/dist/client/schema/index.d.ts +85 -0
  54. package/dist/client/schema/index.d.ts.map +1 -0
  55. package/dist/client/schema/index.js +92 -0
  56. package/dist/client/schema/index.js.map +1 -0
  57. package/dist/client/schema/schemaDrift.d.ts +199 -0
  58. package/dist/client/schema/schemaDrift.d.ts.map +1 -0
  59. package/dist/client/schema/schemaDrift.js +340 -0
  60. package/dist/client/schema/schemaDrift.js.map +1 -0
  61. package/dist/client/schema/typedClient.d.ts +401 -0
  62. package/dist/client/schema/typedClient.d.ts.map +1 -0
  63. package/dist/client/schema/typedClient.js +269 -0
  64. package/dist/client/schema/typedClient.js.map +1 -0
  65. package/dist/client/schema/types.d.ts +477 -0
  66. package/dist/client/schema/types.d.ts.map +1 -0
  67. package/dist/client/schema/types.js +39 -0
  68. package/dist/client/schema/types.js.map +1 -0
  69. package/dist/client/types.d.ts +449 -0
  70. package/dist/client/types.d.ts.map +1 -0
  71. package/dist/client/types.js +149 -0
  72. package/dist/client/types.js.map +1 -0
  73. package/dist/client/workflows.d.ts +51 -0
  74. package/dist/client/workflows.d.ts.map +1 -0
  75. package/dist/client/workflows.js +103 -0
  76. package/dist/client/workflows.js.map +1 -0
  77. package/dist/client/wrapper.d.ts +2198 -0
  78. package/dist/client/wrapper.d.ts.map +1 -0
  79. package/dist/client/wrapper.js +2651 -0
  80. package/dist/client/wrapper.js.map +1 -0
  81. package/dist/component/_generated/api.d.ts +124 -0
  82. package/dist/component/_generated/api.d.ts.map +1 -0
  83. package/dist/component/_generated/api.js +31 -0
  84. package/dist/component/_generated/api.js.map +1 -0
  85. package/dist/component/_generated/component.d.ts +4321 -0
  86. package/dist/component/_generated/component.d.ts.map +1 -0
  87. package/dist/component/_generated/component.js +11 -0
  88. package/dist/component/_generated/component.js.map +1 -0
  89. package/dist/component/_generated/dataModel.d.ts +46 -0
  90. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  91. package/dist/component/_generated/dataModel.js +11 -0
  92. package/dist/component/_generated/dataModel.js.map +1 -0
  93. package/dist/component/_generated/server.d.ts +121 -0
  94. package/dist/component/_generated/server.d.ts.map +1 -0
  95. package/dist/component/_generated/server.js +78 -0
  96. package/dist/component/_generated/server.js.map +1 -0
  97. package/dist/component/auditLog.d.ts +410 -0
  98. package/dist/component/auditLog.d.ts.map +1 -0
  99. package/dist/component/auditLog.js +607 -0
  100. package/dist/component/auditLog.js.map +1 -0
  101. package/dist/component/authorization.d.ts +323 -0
  102. package/dist/component/authorization.d.ts.map +1 -0
  103. package/dist/component/authorization.js +464 -0
  104. package/dist/component/authorization.js.map +1 -0
  105. package/dist/component/authorizationHooks.d.ts +184 -0
  106. package/dist/component/authorizationHooks.d.ts.map +1 -0
  107. package/dist/component/authorizationHooks.js +521 -0
  108. package/dist/component/authorizationHooks.js.map +1 -0
  109. package/dist/component/bulkOperations.d.ts +200 -0
  110. package/dist/component/bulkOperations.d.ts.map +1 -0
  111. package/dist/component/bulkOperations.js +568 -0
  112. package/dist/component/bulkOperations.js.map +1 -0
  113. package/dist/component/contentEntries.d.ts +719 -0
  114. package/dist/component/contentEntries.d.ts.map +1 -0
  115. package/dist/component/contentEntries.js +1617 -0
  116. package/dist/component/contentEntries.js.map +1 -0
  117. package/dist/component/contentEntryMutations.d.ts +505 -0
  118. package/dist/component/contentEntryMutations.d.ts.map +1 -0
  119. package/dist/component/contentEntryMutations.js +1009 -0
  120. package/dist/component/contentEntryMutations.js.map +1 -0
  121. package/dist/component/contentEntryValidation.d.ts +115 -0
  122. package/dist/component/contentEntryValidation.d.ts.map +1 -0
  123. package/dist/component/contentEntryValidation.js +546 -0
  124. package/dist/component/contentEntryValidation.js.map +1 -0
  125. package/dist/component/contentLock.d.ts +328 -0
  126. package/dist/component/contentLock.d.ts.map +1 -0
  127. package/dist/component/contentLock.js +471 -0
  128. package/dist/component/contentLock.js.map +1 -0
  129. package/dist/component/contentTypeMigration.d.ts +411 -0
  130. package/dist/component/contentTypeMigration.d.ts.map +1 -0
  131. package/dist/component/contentTypeMigration.js +805 -0
  132. package/dist/component/contentTypeMigration.js.map +1 -0
  133. package/dist/component/contentTypeMutations.d.ts +975 -0
  134. package/dist/component/contentTypeMutations.d.ts.map +1 -0
  135. package/dist/component/contentTypeMutations.js +768 -0
  136. package/dist/component/contentTypeMutations.js.map +1 -0
  137. package/dist/component/contentTypes.d.ts +538 -0
  138. package/dist/component/contentTypes.d.ts.map +1 -0
  139. package/dist/component/contentTypes.js +304 -0
  140. package/dist/component/contentTypes.js.map +1 -0
  141. package/dist/component/convex.config.d.ts +42 -0
  142. package/dist/component/convex.config.d.ts.map +1 -0
  143. package/dist/component/convex.config.js +43 -0
  144. package/dist/component/convex.config.js.map +1 -0
  145. package/dist/component/documentTypes.d.ts +186 -0
  146. package/dist/component/documentTypes.d.ts.map +1 -0
  147. package/dist/component/documentTypes.js +23 -0
  148. package/dist/component/documentTypes.js.map +1 -0
  149. package/dist/component/eventEmitter.d.ts +281 -0
  150. package/dist/component/eventEmitter.d.ts.map +1 -0
  151. package/dist/component/eventEmitter.js +300 -0
  152. package/dist/component/eventEmitter.js.map +1 -0
  153. package/dist/component/exportImport.d.ts +1120 -0
  154. package/dist/component/exportImport.d.ts.map +1 -0
  155. package/dist/component/exportImport.js +931 -0
  156. package/dist/component/exportImport.js.map +1 -0
  157. package/dist/component/index.d.ts +28 -0
  158. package/dist/component/index.d.ts.map +1 -0
  159. package/dist/component/index.js +142 -0
  160. package/dist/component/index.js.map +1 -0
  161. package/dist/component/lib/deepReferenceResolver.d.ts +252 -0
  162. package/dist/component/lib/deepReferenceResolver.d.ts.map +1 -0
  163. package/dist/component/lib/deepReferenceResolver.js +601 -0
  164. package/dist/component/lib/deepReferenceResolver.js.map +1 -0
  165. package/dist/component/lib/errors.d.ts +306 -0
  166. package/dist/component/lib/errors.d.ts.map +1 -0
  167. package/dist/component/lib/errors.js +407 -0
  168. package/dist/component/lib/errors.js.map +1 -0
  169. package/dist/component/lib/index.d.ts +10 -0
  170. package/dist/component/lib/index.d.ts.map +1 -0
  171. package/dist/component/lib/index.js +33 -0
  172. package/dist/component/lib/index.js.map +1 -0
  173. package/dist/component/lib/mediaReferenceResolver.d.ts +217 -0
  174. package/dist/component/lib/mediaReferenceResolver.d.ts.map +1 -0
  175. package/dist/component/lib/mediaReferenceResolver.js +326 -0
  176. package/dist/component/lib/mediaReferenceResolver.js.map +1 -0
  177. package/dist/component/lib/metadataExtractor.d.ts +245 -0
  178. package/dist/component/lib/metadataExtractor.d.ts.map +1 -0
  179. package/dist/component/lib/metadataExtractor.js +548 -0
  180. package/dist/component/lib/metadataExtractor.js.map +1 -0
  181. package/dist/component/lib/mutationAuth.d.ts +95 -0
  182. package/dist/component/lib/mutationAuth.d.ts.map +1 -0
  183. package/dist/component/lib/mutationAuth.js +146 -0
  184. package/dist/component/lib/mutationAuth.js.map +1 -0
  185. package/dist/component/lib/queries.d.ts +17 -0
  186. package/dist/component/lib/queries.d.ts.map +1 -0
  187. package/dist/component/lib/queries.js +49 -0
  188. package/dist/component/lib/queries.js.map +1 -0
  189. package/dist/component/lib/ragContentChunker.d.ts +423 -0
  190. package/dist/component/lib/ragContentChunker.d.ts.map +1 -0
  191. package/dist/component/lib/ragContentChunker.js +897 -0
  192. package/dist/component/lib/ragContentChunker.js.map +1 -0
  193. package/dist/component/lib/referenceResolver.d.ts +175 -0
  194. package/dist/component/lib/referenceResolver.d.ts.map +1 -0
  195. package/dist/component/lib/referenceResolver.js +293 -0
  196. package/dist/component/lib/referenceResolver.js.map +1 -0
  197. package/dist/component/lib/slugGenerator.d.ts +71 -0
  198. package/dist/component/lib/slugGenerator.d.ts.map +1 -0
  199. package/dist/component/lib/slugGenerator.js +207 -0
  200. package/dist/component/lib/slugGenerator.js.map +1 -0
  201. package/dist/component/lib/slugUniqueness.d.ts +131 -0
  202. package/dist/component/lib/slugUniqueness.d.ts.map +1 -0
  203. package/dist/component/lib/slugUniqueness.js +229 -0
  204. package/dist/component/lib/slugUniqueness.js.map +1 -0
  205. package/dist/component/lib/softDelete.d.ts +18 -0
  206. package/dist/component/lib/softDelete.d.ts.map +1 -0
  207. package/dist/component/lib/softDelete.js +29 -0
  208. package/dist/component/lib/softDelete.js.map +1 -0
  209. package/dist/component/localeFallbackChain.d.ts +410 -0
  210. package/dist/component/localeFallbackChain.d.ts.map +1 -0
  211. package/dist/component/localeFallbackChain.js +467 -0
  212. package/dist/component/localeFallbackChain.js.map +1 -0
  213. package/dist/component/localeFields.d.ts +508 -0
  214. package/dist/component/localeFields.d.ts.map +1 -0
  215. package/dist/component/localeFields.js +592 -0
  216. package/dist/component/localeFields.js.map +1 -0
  217. package/dist/component/mediaAssetMutations.d.ts +235 -0
  218. package/dist/component/mediaAssetMutations.d.ts.map +1 -0
  219. package/dist/component/mediaAssetMutations.js +558 -0
  220. package/dist/component/mediaAssetMutations.js.map +1 -0
  221. package/dist/component/mediaAssets.d.ts +168 -0
  222. package/dist/component/mediaAssets.d.ts.map +1 -0
  223. package/dist/component/mediaAssets.js +618 -0
  224. package/dist/component/mediaAssets.js.map +1 -0
  225. package/dist/component/mediaFolderMutations.d.ts +642 -0
  226. package/dist/component/mediaFolderMutations.d.ts.map +1 -0
  227. package/dist/component/mediaFolderMutations.js +849 -0
  228. package/dist/component/mediaFolderMutations.js.map +1 -0
  229. package/dist/component/mediaUploadMutations.d.ts +136 -0
  230. package/dist/component/mediaUploadMutations.d.ts.map +1 -0
  231. package/dist/component/mediaUploadMutations.js +205 -0
  232. package/dist/component/mediaUploadMutations.js.map +1 -0
  233. package/dist/component/mediaVariantMutations.d.ts +468 -0
  234. package/dist/component/mediaVariantMutations.d.ts.map +1 -0
  235. package/dist/component/mediaVariantMutations.js +737 -0
  236. package/dist/component/mediaVariantMutations.js.map +1 -0
  237. package/dist/component/mediaVariants.d.ts +525 -0
  238. package/dist/component/mediaVariants.d.ts.map +1 -0
  239. package/dist/component/mediaVariants.js +661 -0
  240. package/dist/component/mediaVariants.js.map +1 -0
  241. package/dist/component/ragContentIndexer.d.ts +595 -0
  242. package/dist/component/ragContentIndexer.d.ts.map +1 -0
  243. package/dist/component/ragContentIndexer.js +794 -0
  244. package/dist/component/ragContentIndexer.js.map +1 -0
  245. package/dist/component/rateLimitHooks.d.ts +266 -0
  246. package/dist/component/rateLimitHooks.d.ts.map +1 -0
  247. package/dist/component/rateLimitHooks.js +412 -0
  248. package/dist/component/rateLimitHooks.js.map +1 -0
  249. package/dist/component/roles.d.ts +649 -0
  250. package/dist/component/roles.d.ts.map +1 -0
  251. package/dist/component/roles.js +884 -0
  252. package/dist/component/roles.js.map +1 -0
  253. package/dist/component/scheduledPublish.d.ts +182 -0
  254. package/dist/component/scheduledPublish.d.ts.map +1 -0
  255. package/dist/component/scheduledPublish.js +304 -0
  256. package/dist/component/scheduledPublish.js.map +1 -0
  257. package/dist/component/schema.d.ts +4114 -0
  258. package/dist/component/schema.d.ts.map +1 -0
  259. package/dist/component/schema.js +469 -0
  260. package/dist/component/schema.js.map +1 -0
  261. package/dist/component/taxonomies.d.ts +476 -0
  262. package/dist/component/taxonomies.d.ts.map +1 -0
  263. package/dist/component/taxonomies.js +785 -0
  264. package/dist/component/taxonomies.js.map +1 -0
  265. package/dist/component/taxonomyMutations.d.ts +206 -0
  266. package/dist/component/taxonomyMutations.d.ts.map +1 -0
  267. package/dist/component/taxonomyMutations.js +1001 -0
  268. package/dist/component/taxonomyMutations.js.map +1 -0
  269. package/dist/component/trash.d.ts +265 -0
  270. package/dist/component/trash.d.ts.map +1 -0
  271. package/dist/component/trash.js +621 -0
  272. package/dist/component/trash.js.map +1 -0
  273. package/dist/component/types.d.ts +4 -0
  274. package/dist/component/types.d.ts.map +1 -0
  275. package/dist/component/types.js +2 -0
  276. package/dist/component/types.js.map +1 -0
  277. package/dist/component/userContext.d.ts +508 -0
  278. package/dist/component/userContext.d.ts.map +1 -0
  279. package/dist/component/userContext.js +615 -0
  280. package/dist/component/userContext.js.map +1 -0
  281. package/dist/component/validation.d.ts +387 -0
  282. package/dist/component/validation.d.ts.map +1 -0
  283. package/dist/component/validation.js +1052 -0
  284. package/dist/component/validation.js.map +1 -0
  285. package/dist/component/validators.d.ts +4645 -0
  286. package/dist/component/validators.d.ts.map +1 -0
  287. package/dist/component/validators.js +641 -0
  288. package/dist/component/validators.js.map +1 -0
  289. package/dist/component/versionMutations.d.ts +216 -0
  290. package/dist/component/versionMutations.d.ts.map +1 -0
  291. package/dist/component/versionMutations.js +321 -0
  292. package/dist/component/versionMutations.js.map +1 -0
  293. package/dist/component/webhookTrigger.d.ts +770 -0
  294. package/dist/component/webhookTrigger.d.ts.map +1 -0
  295. package/dist/component/webhookTrigger.js +1413 -0
  296. package/dist/component/webhookTrigger.js.map +1 -0
  297. package/dist/react/index.d.ts +316 -0
  298. package/dist/react/index.d.ts.map +1 -0
  299. package/dist/react/index.js +558 -0
  300. package/dist/react/index.js.map +1 -0
  301. package/dist/test.d.ts +2230 -0
  302. package/dist/test.d.ts.map +1 -0
  303. package/dist/test.js +1107 -0
  304. package/dist/test.js.map +1 -0
  305. package/package.json +95 -0
  306. package/src/cli/commands/admin.ts +104 -0
  307. package/src/cli/index.ts +21 -0
  308. package/src/cli/utils/detectConvexUrl.ts +54 -0
  309. package/src/cli/utils/openBrowser.ts +16 -0
  310. package/src/client/admin-config.ts +138 -0
  311. package/src/client/adminApi.ts +942 -0
  312. package/src/client/agentTools.ts +1311 -0
  313. package/src/client/argTypes.ts +316 -0
  314. package/src/client/field-types.ts +187 -0
  315. package/src/client/index.ts +1301 -0
  316. package/src/client/queryBuilder.ts +1100 -0
  317. package/src/client/schema/codegen.ts +500 -0
  318. package/src/client/schema/defineContentType.ts +501 -0
  319. package/src/client/schema/index.ts +169 -0
  320. package/src/client/schema/schemaDrift.ts +574 -0
  321. package/src/client/schema/typedClient.ts +688 -0
  322. package/src/client/schema/types.ts +666 -0
  323. package/src/client/types.ts +723 -0
  324. package/src/client/workflows.ts +141 -0
  325. package/src/client/wrapper.ts +4304 -0
  326. package/src/component/_generated/api.ts +140 -0
  327. package/src/component/_generated/component.ts +5029 -0
  328. package/src/component/_generated/dataModel.ts +60 -0
  329. package/src/component/_generated/server.ts +156 -0
  330. package/src/component/authorization.ts +647 -0
  331. package/src/component/authorizationHooks.ts +668 -0
  332. package/src/component/bulkOperations.ts +687 -0
  333. package/src/component/contentEntries.ts +1976 -0
  334. package/src/component/contentEntryMutations.ts +1223 -0
  335. package/src/component/contentEntryValidation.ts +707 -0
  336. package/src/component/contentLock.ts +550 -0
  337. package/src/component/contentTypeMigration.ts +1064 -0
  338. package/src/component/contentTypeMutations.ts +969 -0
  339. package/src/component/contentTypes.ts +346 -0
  340. package/src/component/convex.config.ts +44 -0
  341. package/src/component/documentTypes.ts +240 -0
  342. package/src/component/eventEmitter.ts +485 -0
  343. package/src/component/exportImport.ts +1169 -0
  344. package/src/component/index.ts +491 -0
  345. package/src/component/lib/deepReferenceResolver.ts +999 -0
  346. package/src/component/lib/errors.ts +816 -0
  347. package/src/component/lib/index.ts +145 -0
  348. package/src/component/lib/mediaReferenceResolver.ts +495 -0
  349. package/src/component/lib/metadataExtractor.ts +792 -0
  350. package/src/component/lib/mutationAuth.ts +199 -0
  351. package/src/component/lib/queries.ts +79 -0
  352. package/src/component/lib/ragContentChunker.ts +1371 -0
  353. package/src/component/lib/referenceResolver.ts +430 -0
  354. package/src/component/lib/slugGenerator.ts +262 -0
  355. package/src/component/lib/slugUniqueness.ts +333 -0
  356. package/src/component/lib/softDelete.ts +44 -0
  357. package/src/component/localeFallbackChain.ts +673 -0
  358. package/src/component/localeFields.ts +896 -0
  359. package/src/component/mediaAssetMutations.ts +725 -0
  360. package/src/component/mediaAssets.ts +932 -0
  361. package/src/component/mediaFolderMutations.ts +1046 -0
  362. package/src/component/mediaUploadMutations.ts +224 -0
  363. package/src/component/mediaVariantMutations.ts +900 -0
  364. package/src/component/mediaVariants.ts +793 -0
  365. package/src/component/ragContentIndexer.ts +1067 -0
  366. package/src/component/rateLimitHooks.ts +572 -0
  367. package/src/component/roles.ts +1360 -0
  368. package/src/component/scheduledPublish.ts +358 -0
  369. package/src/component/schema.ts +617 -0
  370. package/src/component/taxonomies.ts +949 -0
  371. package/src/component/taxonomyMutations.ts +1210 -0
  372. package/src/component/trash.ts +724 -0
  373. package/src/component/userContext.ts +898 -0
  374. package/src/component/validation.ts +1388 -0
  375. package/src/component/validators.ts +949 -0
  376. package/src/component/versionMutations.ts +392 -0
  377. package/src/component/webhookTrigger.ts +1922 -0
  378. package/src/react/index.ts +898 -0
  379. package/src/test.ts +1580 -0
@@ -0,0 +1,618 @@
1
+ /**
2
+ * Media Asset Query Functions
3
+ *
4
+ * Provides query functions for retrieving media assets from the CMS.
5
+ * Media assets are file records that reference Convex's built-in file storage,
6
+ * along with metadata like dimensions, MIME type, and organization tags.
7
+ */
8
+ import { v } from "convex/values";
9
+ import { isDeleted } from "./lib/softDelete.js";
10
+ import { stream } from "convex-helpers/server/stream";
11
+ import { query } from "./_generated/server.js";
12
+ import {
13
+ // mediaItemDoc,
14
+ listMediaAssetsArgs, paginationResultValidator, } from "./validators.js";
15
+ import schema, { mediaAssetItemValidator } from "./schema.js";
16
+ /**
17
+ * Return type for the get query.
18
+ * Extends the base media asset document with the resolved storage URL
19
+ * and optimization hints for efficient asset delivery.
20
+ */
21
+ const mediaAssetWithUrlDoc = v.object({
22
+ ...mediaAssetItemValidator.fields,
23
+ _id: v.id("mediaItems"),
24
+ _creationTime: v.number(),
25
+ /** The resolved public URL for accessing the asset file */
26
+ url: v.union(v.string(), v.null()),
27
+ /**
28
+ * Optimization hints for efficient asset usage.
29
+ * Includes dimensions for images, duration for audio/video,
30
+ * and recommended transformations based on asset type.
31
+ */
32
+ optimizationHints: v.object({
33
+ /** Whether the asset is an image that can be resized */
34
+ isResizable: v.boolean(),
35
+ /** Suggested aspect ratio for maintaining proportions (width / height) */
36
+ aspectRatio: v.optional(v.number()),
37
+ /** Whether the asset supports transparent backgrounds (PNG, WebP, GIF) */
38
+ hasTransparency: v.optional(v.boolean()),
39
+ /** Whether the asset is a vector format (SVG) that scales without loss */
40
+ isVector: v.optional(v.boolean()),
41
+ /** Suggested max display width based on original dimensions */
42
+ suggestedMaxWidth: v.optional(v.number()),
43
+ /** For video/audio: total duration in seconds */
44
+ durationSeconds: v.optional(v.number()),
45
+ }),
46
+ });
47
+ /**
48
+ * Arguments for retrieving a single media asset.
49
+ */
50
+ const getMediaAssetArgs = v.object({
51
+ /** The ID of the media asset to retrieve */
52
+ id: v.id("mediaItems"),
53
+ /** Whether to include soft-deleted assets (default: false) */
54
+ includeDeleted: v.optional(v.boolean()),
55
+ });
56
+ /**
57
+ * Query to retrieve a single media asset by ID.
58
+ *
59
+ * Returns the asset metadata along with a resolved storage URL and
60
+ * optimization hints for efficient frontend rendering.
61
+ *
62
+ * @param id - The media asset ID to retrieve
63
+ * @param includeDeleted - Whether to include soft-deleted assets (default: false)
64
+ * @returns The media asset document with URL and optimization hints, or null if not found
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * // Basic usage - get asset by ID
69
+ * const asset = await ctx.runQuery(api.mediaAssets.get, {
70
+ * id: assetId,
71
+ * });
72
+ *
73
+ * if (asset) {
74
+ * console.log("Asset URL:", asset.url);
75
+ * console.log("Dimensions:", asset.width, "x", asset.height);
76
+ *
77
+ * // Use optimization hints for responsive images
78
+ * if (asset.optimizationHints.isResizable) {
79
+ * console.log("Aspect ratio:", asset.optimizationHints.aspectRatio);
80
+ * console.log("Max width:", asset.optimizationHints.suggestedMaxWidth);
81
+ * }
82
+ * }
83
+ *
84
+ * // Including deleted assets (for admin recovery UI)
85
+ * const deletedAsset = await ctx.runQuery(api.mediaAssets.get, {
86
+ * id: assetId,
87
+ * includeDeleted: true,
88
+ * });
89
+ * ```
90
+ */
91
+ export const get = query({
92
+ args: getMediaAssetArgs.fields,
93
+ returns: v.union(mediaAssetWithUrlDoc, v.null()),
94
+ handler: async (ctx, args) => {
95
+ const { id, includeDeleted = false } = args;
96
+ const item = await ctx.db.get(id);
97
+ // Return null if item doesn't exist or is not an asset
98
+ if (!item || item.kind !== "asset") {
99
+ return null;
100
+ }
101
+ // Filter out soft-deleted assets unless explicitly requested
102
+ // This respects the soft delete pattern used throughout the CMS
103
+ if (!includeDeleted && isDeleted(item)) {
104
+ return null;
105
+ }
106
+ // Resolve the storage URL from Convex file storage
107
+ // This generates a public URL that can be used directly in img/video tags
108
+ const url = await ctx.storage.getUrl(item.storageId);
109
+ // Build optimization hints based on asset type and metadata
110
+ const optimizationHints = buildOptimizationHints(item);
111
+ return {
112
+ ...item,
113
+ url,
114
+ optimizationHints,
115
+ };
116
+ },
117
+ });
118
+ /**
119
+ * MIME types that support transparency.
120
+ */
121
+ const TRANSPARENT_MIME_TYPES = [
122
+ "image/png",
123
+ "image/webp",
124
+ "image/gif",
125
+ "image/avif",
126
+ ];
127
+ /**
128
+ * MIME types that are vector formats.
129
+ */
130
+ const VECTOR_MIME_TYPES = ["image/svg+xml"];
131
+ /**
132
+ * MIME types that can be resized (raster images).
133
+ */
134
+ const RESIZABLE_MIME_TYPES = [
135
+ "image/jpeg",
136
+ "image/jpg",
137
+ "image/png",
138
+ "image/webp",
139
+ "image/avif",
140
+ "image/gif",
141
+ ];
142
+ /**
143
+ * Builds optimization hints based on the asset's type and metadata.
144
+ *
145
+ * These hints help frontends make intelligent decisions about:
146
+ * - Image sizing and responsive layouts
147
+ * - Placeholder dimensions
148
+ * - Format support (transparency, vectors)
149
+ * - Media playback (duration)
150
+ */
151
+ function buildOptimizationHints(asset) {
152
+ const hints = {
153
+ isResizable: false,
154
+ };
155
+ // Check if the asset is a resizable raster image
156
+ if (RESIZABLE_MIME_TYPES.includes(asset.mimeType)) {
157
+ hints.isResizable = true;
158
+ }
159
+ // Check for transparency support
160
+ if (TRANSPARENT_MIME_TYPES.includes(asset.mimeType)) {
161
+ hints.hasTransparency = true;
162
+ }
163
+ // Check for vector format
164
+ if (VECTOR_MIME_TYPES.includes(asset.mimeType)) {
165
+ hints.isVector = true;
166
+ // Vectors are infinitely resizable but in a different way
167
+ hints.isResizable = false;
168
+ }
169
+ // Calculate aspect ratio if dimensions are available
170
+ if (asset.width && asset.height && asset.height > 0) {
171
+ hints.aspectRatio = Math.round((asset.width / asset.height) * 1000) / 1000;
172
+ hints.suggestedMaxWidth = asset.width;
173
+ }
174
+ // Include duration for video/audio assets
175
+ if (asset.duration !== undefined && asset.duration > 0) {
176
+ hints.durationSeconds = asset.duration;
177
+ }
178
+ return hints;
179
+ }
180
+ // =============================================================================
181
+ // List Media Assets Query
182
+ // =============================================================================
183
+ /**
184
+ * Default page size for media assets list queries.
185
+ */
186
+ const DEFAULT_NUM_ITEMS = 50;
187
+ /**
188
+ * Maximum page size for media assets list queries.
189
+ */
190
+ const MAX_NUM_ITEMS = 250;
191
+ /**
192
+ * Paginated response type for media assets list.
193
+ * Reuses the mediaAssetWithUrlDoc defined above.
194
+ */
195
+ const paginatedMediaAssetsResponse = paginationResultValidator(mediaAssetWithUrlDoc);
196
+ /**
197
+ * Query to list media assets with optional folder filter and pagination.
198
+ *
199
+ * Supports filtering by:
200
+ * - Folder: Filter to assets in a specific folder or root level
201
+ * - MIME type: Exact match or prefix match (e.g., "image/")
202
+ * - Media type: Category filter (image, video, audio, document, other)
203
+ * - Tags: Assets must contain ALL specified tags
204
+ * - Search: Full-text search on filename, title, description
205
+ *
206
+ * Supports sorting by:
207
+ * - _creationTime (default, descending)
208
+ * - filename
209
+ * - size
210
+ * - type
211
+ * - mimeType
212
+ *
213
+ * @param folderId - Filter to assets in this folder (optional)
214
+ * @param includeRootLevel - Include assets without a folder (default: false with folderId, true without)
215
+ * @param type - Filter by media type category
216
+ * @param mimeType - Filter by exact MIME type
217
+ * @param mimeTypePrefix - Filter by MIME type prefix (e.g., "image/")
218
+ * @param search - Full-text search term
219
+ * @param tags - Filter by tags (must match ALL)
220
+ * @param includeDeleted - Include soft-deleted assets (default: false)
221
+ * @param sortField - Field to sort by (default: "_creationTime")
222
+ * @param sortDirection - Sort direction (default: "desc")
223
+ * @param paginationOpts - Pagination options with numItems and cursor
224
+ * @returns Paginated list of media assets with URLs and optimization hints
225
+ *
226
+ * @example
227
+ * ```typescript
228
+ * // List all images in a specific folder
229
+ * const result = await ctx.runQuery(api.mediaAssets.list, {
230
+ * folderId: folderId,
231
+ * type: "image",
232
+ * paginationOpts: { numItems: 20 }
233
+ * });
234
+ *
235
+ * // Search for assets by name
236
+ * const searchResult = await ctx.runQuery(api.mediaAssets.list, {
237
+ * search: "hero banner",
238
+ * mimeTypePrefix: "image/",
239
+ * paginationOpts: { numItems: 10 }
240
+ * });
241
+ *
242
+ * // List all PDFs sorted by size
243
+ * const pdfs = await ctx.runQuery(api.mediaAssets.list, {
244
+ * mimeType: "application/pdf",
245
+ * sortField: "size",
246
+ * sortDirection: "desc",
247
+ * paginationOpts: { numItems: 50 }
248
+ * });
249
+ *
250
+ * // Paginate through results
251
+ * const nextPage = await ctx.runQuery(api.mediaAssets.list, {
252
+ * paginationOpts: {
253
+ * numItems: 20,
254
+ * cursor: result.continueCursor
255
+ * }
256
+ * });
257
+ * ```
258
+ */
259
+ export const list = query({
260
+ args: listMediaAssetsArgs.fields,
261
+ returns: paginatedMediaAssetsResponse,
262
+ handler: async (ctx, args) => {
263
+ const { folderId, includeRootLevel, type, mimeType, mimeTypePrefix, search, tags, includeDeleted = false, deletedOnly = false, sortField = "_creationTime", sortDirection = "desc", paginationOpts, } = args;
264
+ // Map folderId to parentId for the unified mediaItems table
265
+ const parentId = folderId;
266
+ // Clamp numItems to valid range
267
+ const numItems = Math.min(Math.max(1, paginationOpts.numItems ?? DEFAULT_NUM_ITEMS), MAX_NUM_ITEMS);
268
+ const clampedPaginationOpts = {
269
+ ...paginationOpts,
270
+ numItems,
271
+ };
272
+ const sortOptions = {
273
+ sortField,
274
+ sortDirection,
275
+ };
276
+ // Handle full-text search queries
277
+ if (search && search.trim().length > 0) {
278
+ return handleSearchQuery(ctx, {
279
+ search: search.trim(),
280
+ parentId,
281
+ includeRootLevel,
282
+ type,
283
+ mimeType,
284
+ mimeTypePrefix,
285
+ tags,
286
+ includeDeleted,
287
+ deletedOnly,
288
+ sortOptions,
289
+ paginationOpts: clampedPaginationOpts,
290
+ });
291
+ }
292
+ // Handle standard index-based queries
293
+ return handleIndexQuery(ctx, {
294
+ parentId,
295
+ includeRootLevel,
296
+ type,
297
+ mimeType,
298
+ mimeTypePrefix,
299
+ tags,
300
+ includeDeleted,
301
+ deletedOnly,
302
+ sortOptions,
303
+ paginationOpts: clampedPaginationOpts,
304
+ });
305
+ },
306
+ });
307
+ /**
308
+ * Get a sortable value from an asset based on the sort field.
309
+ */
310
+ function getSortValue(asset, sortField) {
311
+ return asset[sortField];
312
+ }
313
+ /**
314
+ * Compare two values for sorting.
315
+ * Handles null/undefined by pushing them to the end.
316
+ */
317
+ function compareValues(a, b, direction) {
318
+ // Handle null/undefined - push them to the end
319
+ if (a === null || a === undefined) {
320
+ return direction === "asc" ? 1 : -1;
321
+ }
322
+ if (b === null || b === undefined) {
323
+ return direction === "asc" ? -1 : 1;
324
+ }
325
+ // Compare numbers
326
+ if (typeof a === "number" && typeof b === "number") {
327
+ return direction === "asc" ? a - b : b - a;
328
+ }
329
+ // Compare strings (case-insensitive)
330
+ if (typeof a === "string" && typeof b === "string") {
331
+ const comparison = a.toLowerCase().localeCompare(b.toLowerCase());
332
+ return direction === "asc" ? comparison : -comparison;
333
+ }
334
+ // Fallback: convert to string and compare
335
+ const aStr = String(a);
336
+ const bStr = String(b);
337
+ const comparison = aStr.localeCompare(bStr);
338
+ return direction === "asc" ? comparison : -comparison;
339
+ }
340
+ /**
341
+ * Sort an array of assets by the specified sort options.
342
+ */
343
+ function sortAssets(assets, sortOptions) {
344
+ return [...assets].sort((a, b) => {
345
+ const aValue = getSortValue(a, sortOptions.sortField);
346
+ const bValue = getSortValue(b, sortOptions.sortField);
347
+ return compareValues(aValue, bValue, sortOptions.sortDirection);
348
+ });
349
+ }
350
+ /**
351
+ * Check if an asset matches the MIME type filter criteria.
352
+ */
353
+ function matchesMimeType(asset, mimeType, mimeTypePrefix) {
354
+ if (mimeType && asset.mimeType !== mimeType) {
355
+ return false;
356
+ }
357
+ if (mimeTypePrefix && !asset.mimeType.startsWith(mimeTypePrefix)) {
358
+ return false;
359
+ }
360
+ return true;
361
+ }
362
+ /**
363
+ * Check if an asset has all the specified tags.
364
+ */
365
+ function matchesTags(asset, requiredTags) {
366
+ if (!requiredTags || requiredTags.length === 0) {
367
+ return true;
368
+ }
369
+ if (!asset.tags || asset.tags.length === 0) {
370
+ return false;
371
+ }
372
+ return requiredTags.every((tag) => asset.tags.includes(tag));
373
+ }
374
+ /**
375
+ * Enrich an asset with URL and optimization hints.
376
+ */
377
+ async function enrichAsset(ctx, asset) {
378
+ const url = await ctx.storage.getUrl(asset.storageId);
379
+ const optimizationHints = buildOptimizationHints(asset);
380
+ return {
381
+ ...asset,
382
+ url,
383
+ optimizationHints,
384
+ };
385
+ }
386
+ /**
387
+ * Internal helper to handle full-text search queries.
388
+ * Uses the search_assets search index for efficient text matching.
389
+ */
390
+ async function handleSearchQuery(ctx, args) {
391
+ const { search, parentId, includeRootLevel, type, mimeType, mimeTypePrefix, tags, includeDeleted, deletedOnly, sortOptions, paginationOpts, } = args;
392
+ const { numItems, cursor } = paginationOpts;
393
+ // Build search query with filter fields available in the index
394
+ // The search_media index supports filtering by kind, type, and parentId
395
+ const searchQuery = ctx.db
396
+ .query("mediaItems")
397
+ .withSearchIndex("search_media", (q) => {
398
+ let query = q.search("searchText", search);
399
+ // Always filter for assets only
400
+ query = query.eq("kind", "asset");
401
+ // Apply filter fields available in the search index
402
+ if (type) {
403
+ query = query.eq("type", type);
404
+ }
405
+ if (parentId) {
406
+ query = query.eq("parentId", parentId);
407
+ }
408
+ return query;
409
+ });
410
+ // Fetch more results for post-filtering
411
+ const hasMimeFilter = mimeType || mimeTypePrefix;
412
+ const hasTagFilter = tags && tags.length > 0;
413
+ const fetchMultiplier = !includeDeleted || hasMimeFilter || hasTagFilter ? 4 : 1;
414
+ const results = await searchQuery.take((numItems + 1) * fetchMultiplier);
415
+ // Apply post-processing filters
416
+ let filteredResults = results;
417
+ // Filter by soft-delete status
418
+ if (deletedOnly) {
419
+ // Only show deleted items
420
+ filteredResults = filteredResults.filter((asset) => isDeleted(asset));
421
+ }
422
+ else if (!includeDeleted) {
423
+ // Exclude deleted items
424
+ filteredResults = filteredResults.filter((asset) => !isDeleted(asset));
425
+ }
426
+ // Filter by folder (for root level handling)
427
+ if (parentId && includeRootLevel) {
428
+ // Show both folder assets and root-level assets
429
+ filteredResults = filteredResults.filter((asset) => asset.parentId === parentId || asset.parentId === undefined);
430
+ }
431
+ else if (!parentId && includeRootLevel === false) {
432
+ // Explicitly exclude root-level assets when not filtering by folder
433
+ filteredResults = filteredResults.filter((asset) => asset.parentId !== undefined);
434
+ }
435
+ // Default (no parentId, includeRootLevel undefined/true): show all assets
436
+ // Filter by MIME type
437
+ if (hasMimeFilter) {
438
+ filteredResults = filteredResults.filter((asset) => matchesMimeType(asset, mimeType, mimeTypePrefix));
439
+ }
440
+ // Filter by tags
441
+ if (hasTagFilter) {
442
+ filteredResults = filteredResults.filter((asset) => matchesTags(asset, tags));
443
+ }
444
+ // Apply sorting
445
+ const sortedResults = sortAssets(filteredResults, sortOptions);
446
+ // Handle cursor-based pagination
447
+ let startIndex = 0;
448
+ if (cursor) {
449
+ const cursorIndex = sortedResults.findIndex((asset) => asset._id === cursor);
450
+ if (cursorIndex !== -1) {
451
+ startIndex = cursorIndex + 1;
452
+ }
453
+ }
454
+ // Get the page of results
455
+ const pageResults = sortedResults.slice(startIndex, startIndex + numItems + 1);
456
+ const isDone = pageResults.length <= numItems;
457
+ const page = isDone ? pageResults : pageResults.slice(0, numItems);
458
+ // Enrich assets with URLs and optimization hints
459
+ const enrichedPage = await Promise.all(page.map((asset) => enrichAsset(ctx, asset)));
460
+ // Get continuation cursor
461
+ const continueCursor = !isDone && page.length > 0 ? page[page.length - 1]._id : null;
462
+ return {
463
+ page: enrichedPage,
464
+ continueCursor,
465
+ isDone,
466
+ };
467
+ }
468
+ /**
469
+ * Internal helper to handle index-based queries using convex-helpers stream.
470
+ * Selects the optimal index based on provided filters.
471
+ */
472
+ async function handleIndexQuery(ctx, args) {
473
+ const { parentId, includeRootLevel, type, mimeType, mimeTypePrefix, tags, includeDeleted, deletedOnly, sortOptions, paginationOpts, } = args;
474
+ const { numItems, cursor } = paginationOpts;
475
+ // Determine if we need in-memory sorting
476
+ const needsCustomSort = sortOptions.sortField !== "_creationTime";
477
+ // Check for post-processing filters
478
+ const hasMimeFilter = mimeType || mimeTypePrefix;
479
+ const hasTagFilter = tags && tags.length > 0;
480
+ const hasFolderLogic = parentId || includeRootLevel !== undefined;
481
+ const hasTypeFilter = !!type;
482
+ const needsPostFiltering = !includeDeleted || hasMimeFilter || hasTagFilter || hasTypeFilter;
483
+ // Create the stream-based query
484
+ const streamDb = stream(ctx.db, schema);
485
+ // Select the best index based on filters
486
+ // Always need to filter for kind: "asset"
487
+ // Note: `type` filtering is now done post-query since type is derived from mimeType
488
+ let baseQuery;
489
+ if (deletedOnly) {
490
+ // Use by_deleted index to efficiently query only deleted items
491
+ // q.gte("deletedAt", null) matches all items where deletedAt has a timestamp value
492
+ // In Convex type ordering: undefined < null < numbers, so gte(null) gets all timestamps
493
+ baseQuery = streamDb
494
+ .query("mediaItems")
495
+ .withIndex("by_deleted", (q) => q.gte("deletedAt", null));
496
+ }
497
+ else if (mimeType) {
498
+ // Use by_mime_type index for exact MIME type match (assets only)
499
+ baseQuery = streamDb
500
+ .query("mediaItems")
501
+ .withIndex("by_mime_type", (q) => q.eq("mimeType", mimeType));
502
+ }
503
+ else if (parentId) {
504
+ // Use by_kind_and_parent index when filtering by folder
505
+ baseQuery = streamDb
506
+ .query("mediaItems")
507
+ .withIndex("by_kind_and_parent", (q) => q.eq("kind", "asset").eq("parentId", parentId));
508
+ }
509
+ else {
510
+ // Default: use by_kind index to get only assets
511
+ baseQuery = streamDb
512
+ .query("mediaItems")
513
+ .withIndex("by_kind", (q) => q.eq("kind", "asset"));
514
+ }
515
+ // Apply order for index-based sorting
516
+ const order = sortOptions.sortDirection;
517
+ const orderedQuery = baseQuery.order(order);
518
+ // Apply filterWith for post-processing filters
519
+ const filteredQuery = orderedQuery.filterWith(async (item) => {
520
+ // Ensure this is an asset (required since by_deleted index doesn't filter by kind)
521
+ if (item.kind !== "asset") {
522
+ return false;
523
+ }
524
+ // Filter by soft-delete status
525
+ // When deletedOnly is true, we're using the by_deleted index which already
526
+ // filters to only items with deletedAt defined - no additional check needed
527
+ if (!deletedOnly && !includeDeleted && isDeleted(item)) {
528
+ // Exclude deleted items unless includeDeleted is true or deletedOnly is true
529
+ return false;
530
+ }
531
+ // Filter by folder logic (when not already using folder index)
532
+ if (!parentId && hasFolderLogic) {
533
+ if (includeRootLevel === true && item.parentId !== undefined) {
534
+ return false; // Only show root-level assets
535
+ }
536
+ if (includeRootLevel === false && item.parentId === undefined) {
537
+ return false; // Exclude root-level assets
538
+ }
539
+ }
540
+ // Filter by MIME type (when not already using mimeType index)
541
+ if (hasMimeFilter && !mimeType) {
542
+ if (!matchesMimeType(item, undefined, mimeTypePrefix)) {
543
+ return false;
544
+ }
545
+ }
546
+ // Filter by tags
547
+ if (hasTagFilter && !matchesTags(item, tags)) {
548
+ return false;
549
+ }
550
+ // Filter by media type category (type is derived from mimeType)
551
+ if (type) {
552
+ // Map type to mimeType prefix for filtering
553
+ const mimePrefix = type === "other" ? null : `${type}/`;
554
+ if (mimePrefix && !item.mimeType.startsWith(mimePrefix)) {
555
+ return false;
556
+ }
557
+ // For "other" type, exclude known media types
558
+ if (type === "other" && (item.mimeType.startsWith("image/") ||
559
+ item.mimeType.startsWith("video/") ||
560
+ item.mimeType.startsWith("audio/") ||
561
+ item.mimeType.startsWith("application/pdf") ||
562
+ item.mimeType.includes("document") ||
563
+ item.mimeType.includes("sheet") ||
564
+ item.mimeType.includes("presentation"))) {
565
+ return false;
566
+ }
567
+ }
568
+ return true;
569
+ });
570
+ // For custom sorting, we need to fetch all and sort in memory
571
+ if (needsCustomSort) {
572
+ // Fetch more results for in-memory sorting and filtering
573
+ const fetchMultiplier = needsPostFiltering ? 10 : 5;
574
+ const results = [];
575
+ let fetchedCount = 0;
576
+ const maxFetch = (numItems + 1) * fetchMultiplier;
577
+ // Manual iteration with filterWith
578
+ for await (const asset of filteredQuery) {
579
+ results.push(asset);
580
+ fetchedCount++;
581
+ if (fetchedCount >= maxFetch) {
582
+ break;
583
+ }
584
+ }
585
+ // Apply custom sorting
586
+ const sortedResults = sortAssets(results, sortOptions);
587
+ // Handle cursor-based pagination
588
+ let startIndex = 0;
589
+ if (cursor) {
590
+ const cursorIndex = sortedResults.findIndex((asset) => asset._id === cursor);
591
+ if (cursorIndex !== -1) {
592
+ startIndex = cursorIndex + 1;
593
+ }
594
+ }
595
+ // Get the page of results
596
+ const pageResults = sortedResults.slice(startIndex, startIndex + numItems + 1);
597
+ const isDone = pageResults.length <= numItems;
598
+ const page = isDone ? pageResults : pageResults.slice(0, numItems);
599
+ // Enrich assets with URLs and optimization hints
600
+ const enrichedPage = await Promise.all(page.map((asset) => enrichAsset(ctx, asset)));
601
+ const continueCursor = !isDone && page.length > 0 ? page[page.length - 1]._id : null;
602
+ return {
603
+ page: enrichedPage,
604
+ continueCursor,
605
+ isDone,
606
+ };
607
+ }
608
+ // For default sorting (_creationTime), use paginator
609
+ const result = await filteredQuery.paginate(paginationOpts);
610
+ // Enrich assets with URLs and optimization hints
611
+ const enrichedPage = await Promise.all(result.page.map((asset) => enrichAsset(ctx, asset)));
612
+ return {
613
+ page: enrichedPage,
614
+ continueCursor: result.continueCursor,
615
+ isDone: result.isDone,
616
+ };
617
+ }
618
+ //# sourceMappingURL=mediaAssets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaAssets.js","sourceRoot":"","sources":["../../src/component/mediaAssets.ts"],"names":[],"mappings":"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"}