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,412 @@
1
+ /**
2
+ * Rate Limit Hooks Execution Module
3
+ *
4
+ * This module provides the infrastructure for executing rate limit hooks
5
+ * that enable custom rate limiting logic for CMS operations.
6
+ *
7
+ * Rate limiting hooks allow parent applications to:
8
+ * - Implement custom rate limiting strategies (token bucket, fixed window, etc.)
9
+ * - Define different limits for different user tiers
10
+ * - Apply limits per operation, category, or globally
11
+ * - Integrate with external rate limiting services
12
+ *
13
+ * Hook execution order:
14
+ * 1. getConfig hook (optional) - Get dynamic rate limit configuration
15
+ * 2. check hook - Check if operation is rate limited
16
+ * 3. consume hook - Record rate limit usage (only if check passed)
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { executeRateLimitHooks, RateLimitedError } from './rateLimitHooks';
21
+ *
22
+ * // In a mutation handler
23
+ * const rateLimitResult = await executeRateLimitHooks({
24
+ * hooks: config.rateLimitHooks,
25
+ * context: {
26
+ * operation: 'contentEntries.create',
27
+ * operationCategory: 'write',
28
+ * userId: args.createdBy,
29
+ * role: userRole,
30
+ * timestamp: Date.now(),
31
+ * },
32
+ * });
33
+ *
34
+ * if (!rateLimitResult.allowed) {
35
+ * throw new RateLimitedError(rateLimitResult.reason ?? 'Rate limit exceeded', {
36
+ * retryAt: rateLimitResult.retryAt,
37
+ * });
38
+ * }
39
+ * ```
40
+ */
41
+ /**
42
+ * Error thrown when a rate limit is exceeded.
43
+ */
44
+ export class RateLimitedError extends Error {
45
+ code = "RATE_LIMITED";
46
+ retryAt;
47
+ operation;
48
+ operationCategory;
49
+ rateLimitInfo;
50
+ constructor(message, options) {
51
+ super(message);
52
+ this.name = "RateLimitedError";
53
+ this.retryAt = options?.retryAt;
54
+ this.operation = options?.operation;
55
+ this.operationCategory = options?.operationCategory;
56
+ this.rateLimitInfo = options?.rateLimitInfo;
57
+ }
58
+ /**
59
+ * Returns a human-readable message with retry information.
60
+ */
61
+ toUserMessage() {
62
+ if (this.retryAt) {
63
+ const retryInMs = this.retryAt - Date.now();
64
+ if (retryInMs > 0) {
65
+ const retryInSeconds = Math.ceil(retryInMs / 1000);
66
+ return `${this.message}. Please retry in ${retryInSeconds} second${retryInSeconds !== 1 ? "s" : ""}.`;
67
+ }
68
+ }
69
+ return this.message;
70
+ }
71
+ }
72
+ // =============================================================================
73
+ // Helper Functions
74
+ // =============================================================================
75
+ /**
76
+ * Maps a CMS operation to its category.
77
+ */
78
+ export function operationToCategory(operation) {
79
+ // Read operations
80
+ if (operation.endsWith(".read") || operation === "versions.read") {
81
+ return "read";
82
+ }
83
+ // Publish operations
84
+ if (operation === "contentEntries.publish" ||
85
+ operation === "contentEntries.unpublish" ||
86
+ operation === "contentEntries.schedule") {
87
+ return "publish";
88
+ }
89
+ // Media operations
90
+ if (operation.startsWith("mediaAssets.") ||
91
+ operation.startsWith("mediaFolders.")) {
92
+ return "media";
93
+ }
94
+ // Admin operations (content type management)
95
+ if (operation.startsWith("contentTypes.")) {
96
+ return "admin";
97
+ }
98
+ // Write operations (default for mutations)
99
+ return "write";
100
+ }
101
+ /**
102
+ * Creates a rate limit context for a CMS operation.
103
+ */
104
+ export function createRateLimitContext(operation, options) {
105
+ return {
106
+ operation,
107
+ operationCategory: operationToCategory(operation),
108
+ userId: options.userId,
109
+ role: options.role,
110
+ contentTypeId: options.contentTypeId,
111
+ contentTypeName: options.contentTypeName,
112
+ metadata: options.metadata,
113
+ timestamp: Date.now(),
114
+ };
115
+ }
116
+ /**
117
+ * Execute a single rate limit hook safely.
118
+ * Catches errors and converts them to allowed results to avoid blocking operations.
119
+ */
120
+ async function executeCheckHook(hook, context) {
121
+ if (!hook) {
122
+ return { allowed: true };
123
+ }
124
+ try {
125
+ return await hook(context);
126
+ }
127
+ catch (error) {
128
+ // Hook threw an error - log and allow operation to proceed
129
+ // This prevents rate limit hook errors from blocking legitimate operations
130
+ console.error("Rate limit check hook error:", error);
131
+ return { allowed: true };
132
+ }
133
+ }
134
+ /**
135
+ * Execute the consume hook safely.
136
+ */
137
+ async function executeConsumeHook(hook, context) {
138
+ if (!hook) {
139
+ return { allowed: true, consumed: false };
140
+ }
141
+ try {
142
+ return await hook(context);
143
+ }
144
+ catch (error) {
145
+ // Hook threw an error - log and allow operation to proceed
146
+ console.error("Rate limit consume hook error:", error);
147
+ return { allowed: true, consumed: false };
148
+ }
149
+ }
150
+ /**
151
+ * Execute the config hook safely.
152
+ */
153
+ async function executeConfigHook(hook, context) {
154
+ if (!hook) {
155
+ return undefined;
156
+ }
157
+ try {
158
+ return await hook(context);
159
+ }
160
+ catch (error) {
161
+ console.error("Rate limit config hook error:", error);
162
+ return undefined;
163
+ }
164
+ }
165
+ // =============================================================================
166
+ // Main Rate Limit Execution Function
167
+ // =============================================================================
168
+ /**
169
+ * Execute the full rate limit hook chain for an operation.
170
+ *
171
+ * This function orchestrates the execution of rate limit hooks in the correct order:
172
+ *
173
+ * 1. Check if rate limiting should be skipped (no hooks, excluded operation/category, admin bypass)
174
+ * 2. Get configuration from getConfig hook (if provided)
175
+ * 3. Execute check hook (or operation-specific override)
176
+ * 4. Execute consume hook if check passed (or operation-specific override)
177
+ * 5. Call onRateLimited callback if operation was denied
178
+ *
179
+ * @param options - Configuration for the rate limit execution
180
+ * @returns RateLimitResult indicating if the operation is allowed
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * const result = await executeRateLimitHooks({
185
+ * hooks: config.rateLimitHooks,
186
+ * context: {
187
+ * operation: 'contentEntries.create',
188
+ * operationCategory: 'write',
189
+ * userId: 'user123',
190
+ * role: 'editor',
191
+ * timestamp: Date.now(),
192
+ * },
193
+ * });
194
+ *
195
+ * if (!result.allowed) {
196
+ * throw new RateLimitedError(result.reason ?? 'Rate limit exceeded', {
197
+ * retryAt: result.retryAt,
198
+ * });
199
+ * }
200
+ * ```
201
+ */
202
+ export async function executeRateLimitHooks(options) {
203
+ const { hooks, context } = options;
204
+ // -------------------------------------------------------------------------
205
+ // Step 1: Check if rate limiting should be skipped
206
+ // -------------------------------------------------------------------------
207
+ // No hooks configured - skip rate limiting
208
+ if (!hooks || (!hooks.check && !hooks.consume && !hooks.operationHooks)) {
209
+ return {
210
+ allowed: true,
211
+ skipped: true,
212
+ };
213
+ }
214
+ // Check if operation is excluded
215
+ if (hooks.excludeOperations?.includes(context.operation)) {
216
+ return {
217
+ allowed: true,
218
+ skipped: true,
219
+ };
220
+ }
221
+ // Check if category is excluded
222
+ if (hooks.excludeCategories?.includes(context.operationCategory)) {
223
+ return {
224
+ allowed: true,
225
+ skipped: true,
226
+ };
227
+ }
228
+ // Check if admin users should be exempted
229
+ if (hooks.skipForAdmin && context.role === "admin") {
230
+ return {
231
+ allowed: true,
232
+ skipped: true,
233
+ };
234
+ }
235
+ // -------------------------------------------------------------------------
236
+ // Step 2: Get operation-specific hooks or use global hooks
237
+ // -------------------------------------------------------------------------
238
+ const operationHooks = hooks.operationHooks?.[context.operation];
239
+ const checkHook = operationHooks?.check ?? hooks.check;
240
+ const consumeHook = operationHooks?.consume ?? hooks.consume;
241
+ const configHook = operationHooks?.getConfig ?? hooks.getConfig;
242
+ // No check hook configured - skip rate limiting
243
+ if (!checkHook) {
244
+ return {
245
+ allowed: true,
246
+ skipped: true,
247
+ };
248
+ }
249
+ // -------------------------------------------------------------------------
250
+ // Step 3: Get configuration (optional)
251
+ // -------------------------------------------------------------------------
252
+ const configResult = await executeConfigHook(configHook, context);
253
+ // Config hook says rate limiting is disabled
254
+ if (configResult && !configResult.enabled) {
255
+ return {
256
+ allowed: true,
257
+ skipped: true,
258
+ config: configResult,
259
+ };
260
+ }
261
+ // -------------------------------------------------------------------------
262
+ // Step 4: Execute check hook
263
+ // -------------------------------------------------------------------------
264
+ const checkResult = await executeCheckHook(checkHook, context);
265
+ if (!checkResult.allowed) {
266
+ // Rate limit exceeded - call onRateLimited callback
267
+ if (hooks.onRateLimited) {
268
+ try {
269
+ await hooks.onRateLimited(context, checkResult);
270
+ }
271
+ catch (error) {
272
+ // Don't let callback errors affect the result
273
+ console.error("onRateLimited callback error:", error);
274
+ }
275
+ }
276
+ return {
277
+ allowed: false,
278
+ retryAt: checkResult.retryAt,
279
+ reason: checkResult.reason ?? "Rate limit exceeded",
280
+ skipped: false,
281
+ rateLimitInfo: checkResult.rateLimitInfo,
282
+ config: configResult,
283
+ };
284
+ }
285
+ // -------------------------------------------------------------------------
286
+ // Step 5: Execute consume hook (if provided)
287
+ // -------------------------------------------------------------------------
288
+ // If no separate consume hook, the check hook is assumed to have consumed
289
+ if (consumeHook) {
290
+ const consumeResult = await executeConsumeHook(consumeHook, context);
291
+ if (!consumeResult.allowed) {
292
+ // Consume failed (another request beat us to the limit)
293
+ if (hooks.onRateLimited) {
294
+ try {
295
+ await hooks.onRateLimited(context, consumeResult);
296
+ }
297
+ catch (error) {
298
+ console.error("onRateLimited callback error:", error);
299
+ }
300
+ }
301
+ return {
302
+ allowed: false,
303
+ retryAt: consumeResult.retryAt,
304
+ reason: consumeResult.reason ?? "Rate limit exceeded",
305
+ skipped: false,
306
+ rateLimitInfo: consumeResult.rateLimitInfo,
307
+ config: configResult,
308
+ };
309
+ }
310
+ }
311
+ // -------------------------------------------------------------------------
312
+ // All checks passed
313
+ // -------------------------------------------------------------------------
314
+ return {
315
+ allowed: true,
316
+ skipped: false,
317
+ rateLimitInfo: checkResult.rateLimitInfo,
318
+ config: configResult,
319
+ };
320
+ }
321
+ /**
322
+ * Execute rate limit hooks and throw RateLimitedError if rate limited.
323
+ *
324
+ * This is a convenience wrapper that executes hooks and throws
325
+ * RateLimitedError if the operation is rate limited.
326
+ *
327
+ * @param options - Rate limit execution options
328
+ * @throws RateLimitedError if the operation is rate limited
329
+ * @returns The rate limit result (if allowed)
330
+ */
331
+ export async function requireRateLimit(options) {
332
+ const result = await executeRateLimitHooks(options);
333
+ if (!result.allowed) {
334
+ throw new RateLimitedError(result.reason ?? "Rate limit exceeded", {
335
+ retryAt: result.retryAt,
336
+ operation: options.context.operation,
337
+ operationCategory: options.context.operationCategory,
338
+ rateLimitInfo: result.rateLimitInfo,
339
+ });
340
+ }
341
+ return result;
342
+ }
343
+ // =============================================================================
344
+ // Utility Functions for Building Rate Limit Hooks
345
+ // =============================================================================
346
+ /**
347
+ * Creates a simple rate limit key from context.
348
+ * Default format: `{userId}:{operationCategory}`
349
+ */
350
+ export function createRateLimitKey(context, options) {
351
+ const parts = [];
352
+ if (options?.prefix) {
353
+ parts.push(options.prefix);
354
+ }
355
+ if (context.userId) {
356
+ parts.push(context.userId);
357
+ }
358
+ else {
359
+ parts.push("anonymous");
360
+ }
361
+ if (options?.includeOperation) {
362
+ parts.push(context.operation);
363
+ }
364
+ else {
365
+ parts.push(context.operationCategory);
366
+ }
367
+ if (options?.includeContentType && context.contentTypeName) {
368
+ parts.push(context.contentTypeName);
369
+ }
370
+ return parts.join(":");
371
+ }
372
+ /**
373
+ * Creates a rate limit name from operation category.
374
+ * Useful for mapping to named rate limits in convex-helpers.
375
+ */
376
+ export function createRateLimitName(context, prefix = "cms") {
377
+ return `${prefix}.${context.operationCategory}`;
378
+ }
379
+ /**
380
+ * Default tier-based rate limit configurations.
381
+ * Can be used as a starting point for custom configurations.
382
+ */
383
+ export const DEFAULT_TIER_LIMITS = {
384
+ free: {
385
+ read: { rate: 100, period: 60000 }, // 100 reads per minute
386
+ write: { rate: 10, period: 60000 }, // 10 writes per minute
387
+ publish: { rate: 5, period: 60000 }, // 5 publishes per minute
388
+ media: { rate: 10, period: 60000 }, // 10 media ops per minute
389
+ admin: { rate: 5, period: 60000 }, // 5 admin ops per minute
390
+ },
391
+ pro: {
392
+ read: { rate: 500, period: 60000 },
393
+ write: { rate: 50, period: 60000 },
394
+ publish: { rate: 20, period: 60000 },
395
+ media: { rate: 50, period: 60000 },
396
+ admin: { rate: 20, period: 60000 },
397
+ },
398
+ enterprise: {
399
+ read: { rate: 2000, period: 60000 },
400
+ write: { rate: 200, period: 60000 },
401
+ publish: { rate: 100, period: 60000 },
402
+ media: { rate: 200, period: 60000 },
403
+ admin: { rate: 100, period: 60000 },
404
+ },
405
+ };
406
+ /**
407
+ * Get rate limit configuration for a user tier and operation category.
408
+ */
409
+ export function getTierLimit(tier, category) {
410
+ return DEFAULT_TIER_LIMITS[tier][category];
411
+ }
412
+ //# sourceMappingURL=rateLimitHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitHooks.js","sourceRoot":"","sources":["../../src/component/rateLimitHooks.ts"],"names":[],"mappings":"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"}