@revealui/core 0.2.1 → 0.5.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 (395) hide show
  1. package/dist/api/compression.d.ts.map +1 -1
  2. package/dist/api/payload-optimization.d.ts.map +1 -1
  3. package/dist/api/rate-limit.d.ts +29 -28
  4. package/dist/api/rate-limit.d.ts.map +1 -1
  5. package/dist/api/rate-limit.js +63 -3
  6. package/dist/api/response-cache.d.ts.map +1 -1
  7. package/dist/api/response-cache.js +1 -1
  8. package/dist/api/rest.d.ts.map +1 -1
  9. package/dist/api/rest.js +3 -2
  10. package/dist/auth/access.d.ts.map +1 -1
  11. package/dist/auth/index.d.ts.map +1 -1
  12. package/dist/cache/query-cache.d.ts +12 -10
  13. package/dist/cache/query-cache.d.ts.map +1 -1
  14. package/dist/cache/query-cache.js +38 -42
  15. package/dist/caching/index.d.ts +6 -0
  16. package/dist/caching/index.d.ts.map +1 -0
  17. package/dist/caching/index.js +5 -0
  18. package/dist/client/admin/RichText.d.ts +1 -1
  19. package/dist/client/admin/RichText.d.ts.map +1 -1
  20. package/dist/client/admin/components/AdminDashboard.d.ts.map +1 -1
  21. package/dist/client/admin/components/AdminDashboard.js +195 -205
  22. package/dist/client/admin/components/CollectionList.d.ts.map +1 -1
  23. package/dist/client/admin/components/DocumentForm.d.ts.map +1 -1
  24. package/dist/client/admin/components/DocumentForm.js +130 -6
  25. package/dist/client/admin/components/GlobalForm.d.ts.map +1 -1
  26. package/dist/client/admin/context/ServerFunctionContext.d.ts +8 -0
  27. package/dist/client/admin/context/ServerFunctionContext.d.ts.map +1 -0
  28. package/dist/client/admin/context/ServerFunctionContext.js +15 -0
  29. package/dist/client/admin/i18n/en.d.ts.map +1 -1
  30. package/dist/client/admin/index.d.ts +1 -0
  31. package/dist/client/admin/index.d.ts.map +1 -1
  32. package/dist/client/admin/index.js +1 -0
  33. package/dist/client/admin/layout.d.ts +1 -1
  34. package/dist/client/admin/layout.d.ts.map +1 -1
  35. package/dist/client/admin/layout.js +3 -2
  36. package/dist/client/admin/page.d.ts.map +1 -1
  37. package/dist/client/admin/utils/apiClient.d.ts.map +1 -1
  38. package/dist/client/admin/utils/apiClient.js +0 -4
  39. package/dist/client/admin/utils/index.d.ts +0 -1
  40. package/dist/client/admin/utils/index.d.ts.map +1 -1
  41. package/dist/client/admin/utils/index.js +0 -1
  42. package/dist/client/admin/utils/serializeConfig.d.ts.map +1 -1
  43. package/dist/client/hooks.d.ts.map +1 -1
  44. package/dist/client/index.d.ts.map +1 -1
  45. package/dist/client/richtext/RichTextEditor.d.ts.map +1 -1
  46. package/dist/client/richtext/components/ImageNodeComponent.d.ts.map +1 -1
  47. package/dist/client/richtext/components/ImageNodeComponent.js +0 -1
  48. package/dist/client/richtext/components/ImageUploadButton.d.ts +2 -0
  49. package/dist/client/richtext/components/ImageUploadButton.d.ts.map +1 -1
  50. package/dist/client/richtext/components/ImageUploadButton.js +30 -15
  51. package/dist/client/richtext/index.d.ts.map +1 -1
  52. package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts.map +1 -1
  53. package/dist/client/richtext/nodes/ImageNode.d.ts.map +1 -1
  54. package/dist/client/richtext/plugins/CollaborationPlugin.d.ts.map +1 -1
  55. package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts.map +1 -1
  56. package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts.map +1 -1
  57. package/dist/client/richtext/plugins/FloatingToolbarPlugin.js +1 -3
  58. package/dist/client/richtext/plugins/ImagePlugin.d.ts.map +1 -1
  59. package/dist/client/richtext/plugins/ToolbarPlugin.d.ts.map +1 -1
  60. package/dist/client/ui/index.d.ts.map +1 -1
  61. package/dist/client/ui/index.js +1 -1
  62. package/dist/collections/CollectionOperations.d.ts +7 -7
  63. package/dist/collections/CollectionOperations.d.ts.map +1 -1
  64. package/dist/collections/CollectionOperations.js +15 -1
  65. package/dist/collections/hooks.d.ts.map +1 -1
  66. package/dist/collections/index.d.ts.map +1 -1
  67. package/dist/collections/operations/create.d.ts +4 -5
  68. package/dist/collections/operations/create.d.ts.map +1 -1
  69. package/dist/collections/operations/create.js +35 -6
  70. package/dist/collections/operations/createMany.d.ts +12 -0
  71. package/dist/collections/operations/createMany.d.ts.map +1 -0
  72. package/dist/collections/operations/createMany.js +43 -0
  73. package/dist/collections/operations/delete.d.ts +1 -1
  74. package/dist/collections/operations/delete.d.ts.map +1 -1
  75. package/dist/collections/operations/delete.js +31 -2
  76. package/dist/collections/operations/deleteMany.d.ts +11 -0
  77. package/dist/collections/operations/deleteMany.d.ts.map +1 -0
  78. package/dist/collections/operations/deleteMany.js +50 -0
  79. package/dist/collections/operations/fieldHooks.d.ts +2 -2
  80. package/dist/collections/operations/fieldHooks.d.ts.map +1 -1
  81. package/dist/collections/operations/fieldHooks.js +4 -4
  82. package/dist/collections/operations/find.d.ts +2 -4
  83. package/dist/collections/operations/find.d.ts.map +1 -1
  84. package/dist/collections/operations/find.js +115 -8
  85. package/dist/collections/operations/findById.d.ts +3 -4
  86. package/dist/collections/operations/findById.d.ts.map +1 -1
  87. package/dist/collections/operations/findById.js +53 -1
  88. package/dist/collections/operations/sqlAdapter.d.ts +23 -0
  89. package/dist/collections/operations/sqlAdapter.d.ts.map +1 -0
  90. package/dist/collections/operations/sqlAdapter.js +76 -0
  91. package/dist/collections/operations/update.d.ts +3 -5
  92. package/dist/collections/operations/update.d.ts.map +1 -1
  93. package/dist/collections/operations/update.js +103 -11
  94. package/dist/collections/operations/updateMany.d.ts +11 -0
  95. package/dist/collections/operations/updateMany.d.ts.map +1 -0
  96. package/dist/collections/operations/updateMany.js +52 -0
  97. package/dist/collections/registry.d.ts +12 -0
  98. package/dist/collections/registry.d.ts.map +1 -0
  99. package/dist/collections/registry.js +38 -0
  100. package/dist/config/index.d.ts.map +1 -1
  101. package/dist/config/runtime.d.ts.map +1 -1
  102. package/dist/config/utils.d.ts +0 -10
  103. package/dist/config/utils.d.ts.map +1 -1
  104. package/dist/config/utils.js +0 -13
  105. package/dist/database/index.d.ts +3 -0
  106. package/dist/database/index.d.ts.map +1 -1
  107. package/dist/database/index.js +1 -5
  108. package/dist/database/safe-parse.d.ts.map +1 -1
  109. package/dist/database/ssl-config.d.ts.map +1 -1
  110. package/dist/database/type-adapter.d.ts.map +1 -1
  111. package/dist/database/universal-postgres.d.ts.map +1 -1
  112. package/dist/database/universal-postgres.js +6 -1
  113. package/dist/dataloader.d.ts.map +1 -1
  114. package/dist/error-handling/error-boundary.d.ts.map +1 -1
  115. package/dist/error-handling/error-reporter.d.ts +1 -1
  116. package/dist/error-handling/error-reporter.d.ts.map +1 -1
  117. package/dist/error-handling/error-reporter.js +19 -5
  118. package/dist/error-handling/fallback-components.d.ts.map +1 -1
  119. package/dist/error-handling/fallback-components.js +1 -1
  120. package/dist/error-handling/index.d.ts +2 -4
  121. package/dist/error-handling/index.d.ts.map +1 -1
  122. package/dist/error-handling/index.js +1 -4
  123. package/dist/factories/builders.d.ts.map +1 -1
  124. package/dist/factories/index.d.ts.map +1 -1
  125. package/dist/features.d.ts +7 -7
  126. package/dist/features.d.ts.map +1 -1
  127. package/dist/features.js +2 -2
  128. package/dist/fieldTraversal.d.ts.map +1 -1
  129. package/dist/fields/config/types.d.ts.map +1 -1
  130. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  131. package/dist/fields/getFieldPaths.d.ts.map +1 -1
  132. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  133. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  134. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  135. package/dist/generated/types/cms.d.ts.map +1 -1
  136. package/dist/generated/types/cms.js +0 -1
  137. package/dist/generated/types/neon.d.ts.map +1 -1
  138. package/dist/generated/types/neon.js +4 -2
  139. package/dist/globals/GlobalOperations.d.ts.map +1 -1
  140. package/dist/globals/GlobalOperations.js +16 -4
  141. package/dist/globals/index.d.ts.map +1 -1
  142. package/dist/index.d.ts +15 -4
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +15 -5
  145. package/dist/instance/RevealUIInstance.d.ts.map +1 -1
  146. package/dist/instance/RevealUIInstance.js +6 -19
  147. package/dist/instance/index.d.ts.map +1 -1
  148. package/dist/instance/logger.d.ts.map +1 -1
  149. package/dist/instance/methods/create.d.ts.map +1 -1
  150. package/dist/instance/methods/create.js +0 -3
  151. package/dist/instance/methods/delete.d.ts.map +1 -1
  152. package/dist/instance/methods/delete.js +1 -4
  153. package/dist/instance/methods/find.d.ts.map +1 -1
  154. package/dist/instance/methods/find.js +0 -3
  155. package/dist/instance/methods/findById.d.ts.map +1 -1
  156. package/dist/instance/methods/findById.js +0 -3
  157. package/dist/instance/methods/hooks.d.ts.map +1 -1
  158. package/dist/instance/methods/update.d.ts.map +1 -1
  159. package/dist/instance/methods/update.js +0 -3
  160. package/dist/jobs/index.d.ts +16 -0
  161. package/dist/jobs/index.d.ts.map +1 -0
  162. package/dist/jobs/index.js +14 -0
  163. package/dist/jobs/queue.d.ts +57 -0
  164. package/dist/jobs/queue.d.ts.map +1 -0
  165. package/dist/jobs/queue.js +134 -0
  166. package/dist/license-encryption.d.ts +21 -0
  167. package/dist/license-encryption.d.ts.map +1 -0
  168. package/dist/license-encryption.js +74 -0
  169. package/dist/license.d.ts +26 -3
  170. package/dist/license.d.ts.map +1 -1
  171. package/dist/license.js +87 -7
  172. package/dist/monitoring/alerts.d.ts +4 -4
  173. package/dist/monitoring/alerts.d.ts.map +1 -1
  174. package/dist/monitoring/cleanup-manager.d.ts.map +1 -1
  175. package/dist/monitoring/health-monitor.d.ts.map +1 -1
  176. package/dist/monitoring/index.d.ts.map +1 -1
  177. package/dist/monitoring/process-registry.d.ts.map +1 -1
  178. package/dist/monitoring/query-monitor.d.ts.map +1 -1
  179. package/dist/monitoring/types.d.ts.map +1 -1
  180. package/dist/monitoring/zombie-detector.d.ts.map +1 -1
  181. package/dist/monitoring/zombie-detector.js +5 -0
  182. package/dist/nextjs/index.d.ts.map +1 -1
  183. package/dist/nextjs/utilities.d.ts.map +1 -1
  184. package/dist/nextjs/withRevealUI.d.ts.map +1 -1
  185. package/dist/observability/alerts.d.ts.map +1 -1
  186. package/dist/observability/alerts.js +1 -2
  187. package/dist/observability/health-check.d.ts +0 -4
  188. package/dist/observability/health-check.d.ts.map +1 -1
  189. package/dist/observability/health-check.js +0 -36
  190. package/dist/observability/index.d.ts.map +1 -1
  191. package/dist/observability/logger.d.ts.map +1 -1
  192. package/dist/observability/logger.js +1 -1
  193. package/dist/observability/metrics.d.ts.map +1 -1
  194. package/dist/observability/tracing.d.ts.map +1 -1
  195. package/dist/observability/tracing.js +0 -1
  196. package/dist/plugins/form-builder.d.ts.map +1 -1
  197. package/dist/plugins/index.d.ts.map +1 -1
  198. package/dist/plugins/nested-docs.d.ts +4 -0
  199. package/dist/plugins/nested-docs.d.ts.map +1 -1
  200. package/dist/plugins/nested-docs.js +50 -6
  201. package/dist/plugins/redirects.d.ts.map +1 -1
  202. package/dist/queries/index.d.ts.map +1 -1
  203. package/dist/queries/queryBuilder.d.ts.map +1 -1
  204. package/dist/queries/queryBuilder.js +13 -5
  205. package/dist/relationships/analyzer.d.ts.map +1 -1
  206. package/dist/relationships/analyzer.js +8 -0
  207. package/dist/relationships/index.d.ts.map +1 -1
  208. package/dist/relationships/populate-core.d.ts +57 -0
  209. package/dist/relationships/populate-core.d.ts.map +1 -0
  210. package/dist/relationships/populate-core.js +116 -0
  211. package/dist/relationships/populate-helpers.d.ts +5 -51
  212. package/dist/relationships/populate-helpers.d.ts.map +1 -1
  213. package/dist/relationships/populate-helpers.js +4 -109
  214. package/dist/relationships/population.d.ts +1 -9
  215. package/dist/relationships/population.d.ts.map +1 -1
  216. package/dist/relationships/population.js +8 -3
  217. package/dist/revealui.d.ts.map +1 -1
  218. package/dist/richtext/exports/client/rcc.d.ts.map +1 -1
  219. package/dist/richtext/exports/client/rcc.js +1 -1
  220. package/dist/richtext/exports/server/rsc.d.ts +17 -0
  221. package/dist/richtext/exports/server/rsc.d.ts.map +1 -1
  222. package/dist/richtext/exports/server/rsc.js +61 -5
  223. package/dist/richtext/index.d.ts.map +1 -1
  224. package/dist/richtext/lexical.d.ts.map +1 -1
  225. package/dist/security/index.d.ts +3 -16
  226. package/dist/security/index.d.ts.map +1 -1
  227. package/dist/security/index.js +3 -16
  228. package/dist/server/index.d.ts.map +1 -1
  229. package/dist/server/renderPage.d.ts.map +1 -1
  230. package/dist/storage/index.d.ts +1 -0
  231. package/dist/storage/index.d.ts.map +1 -1
  232. package/dist/storage/index.js +2 -4
  233. package/dist/storage/vercel-blob.d.ts.map +1 -1
  234. package/dist/storage/vercel-blob.js +3 -0
  235. package/dist/translations/index.d.ts.map +1 -1
  236. package/dist/types/access.d.ts.map +1 -1
  237. package/dist/types/api.d.ts.map +1 -1
  238. package/dist/types/cms.d.ts.map +1 -1
  239. package/dist/types/config.d.ts.map +1 -1
  240. package/dist/types/core.d.ts +1 -1
  241. package/dist/types/core.d.ts.map +1 -1
  242. package/dist/types/extensions.d.ts.map +1 -1
  243. package/dist/types/frontend.d.ts.map +1 -1
  244. package/dist/types/generated.d.ts.map +1 -1
  245. package/dist/types/hooks.d.ts.map +1 -1
  246. package/dist/types/index.d.ts +1 -1
  247. package/dist/types/index.d.ts.map +1 -1
  248. package/dist/types/interfaces/app.d.ts.map +1 -1
  249. package/dist/types/jobs.d.ts.map +1 -1
  250. package/dist/types/legacy.d.ts.map +1 -1
  251. package/dist/types/plugins.d.ts.map +1 -1
  252. package/dist/types/query.d.ts.map +1 -1
  253. package/dist/types/request.d.ts.map +1 -1
  254. package/dist/types/richtext.d.ts.map +1 -1
  255. package/dist/types/runtime.d.ts +60 -1
  256. package/dist/types/runtime.d.ts.map +1 -1
  257. package/dist/types/schema.d.ts.map +1 -1
  258. package/dist/types/user.d.ts.map +1 -1
  259. package/dist/utils/access-conversion.d.ts.map +1 -1
  260. package/dist/utils/api-wrapper.d.ts.map +1 -1
  261. package/dist/utils/api-wrapper.js +1 -1
  262. package/dist/utils/block-conversion.d.ts.map +1 -1
  263. package/dist/utils/cache.d.ts.map +1 -1
  264. package/dist/utils/deep-clone.js +0 -1
  265. package/dist/utils/error-responses.d.ts.map +1 -1
  266. package/dist/utils/error-responses.js +2 -3
  267. package/dist/utils/errors.d.ts +36 -0
  268. package/dist/utils/errors.d.ts.map +1 -1
  269. package/dist/utils/errors.js +103 -0
  270. package/dist/utils/field-conversion.d.ts +1 -1
  271. package/dist/utils/field-conversion.d.ts.map +1 -1
  272. package/dist/utils/flattenResult.d.ts.map +1 -1
  273. package/dist/utils/flattenResult.js +0 -1
  274. package/dist/utils/getBlockSelect.d.ts.map +1 -1
  275. package/dist/utils/getSelectMode.d.ts.map +1 -1
  276. package/dist/utils/isValidID.d.ts.map +1 -1
  277. package/dist/utils/json-parsing.d.ts.map +1 -1
  278. package/dist/utils/logger-client.d.ts.map +1 -1
  279. package/dist/utils/logger-server.d.ts.map +1 -1
  280. package/dist/utils/logger.d.ts.map +1 -1
  281. package/dist/utils/request-context.d.ts.map +1 -1
  282. package/dist/utils/stripUnselectedFields.d.ts.map +1 -1
  283. package/dist/utils/type-guards.d.ts.map +1 -1
  284. package/package.json +58 -26
  285. package/dist/caching/app-cache.d.ts +0 -237
  286. package/dist/caching/app-cache.d.ts.map +0 -1
  287. package/dist/caching/app-cache.js +0 -430
  288. package/dist/caching/cdn-config.d.ts +0 -155
  289. package/dist/caching/cdn-config.d.ts.map +0 -1
  290. package/dist/caching/cdn-config.js +0 -411
  291. package/dist/caching/edge-cache.d.ts +0 -177
  292. package/dist/caching/edge-cache.d.ts.map +0 -1
  293. package/dist/caching/edge-cache.js +0 -385
  294. package/dist/caching/service-worker.d.ts +0 -154
  295. package/dist/caching/service-worker.d.ts.map +0 -1
  296. package/dist/caching/service-worker.js +0 -437
  297. package/dist/client/admin/utils/auth.d.ts +0 -23
  298. package/dist/client/admin/utils/auth.d.ts.map +0 -1
  299. package/dist/client/admin/utils/auth.js +0 -52
  300. package/dist/client/http/client.d.ts +0 -15
  301. package/dist/client/http/client.d.ts.map +0 -1
  302. package/dist/client/http/client.js +0 -49
  303. package/dist/client/http/fetchBanner.d.ts +0 -18
  304. package/dist/client/http/fetchBanner.d.ts.map +0 -1
  305. package/dist/client/http/fetchBanner.js +0 -44
  306. package/dist/client/http/fetchCard.d.ts +0 -18
  307. package/dist/client/http/fetchCard.d.ts.map +0 -1
  308. package/dist/client/http/fetchCard.js +0 -46
  309. package/dist/client/http/fetchEvents.d.ts +0 -18
  310. package/dist/client/http/fetchEvents.d.ts.map +0 -1
  311. package/dist/client/http/fetchEvents.js +0 -44
  312. package/dist/client/http/fetchHero.d.ts +0 -17
  313. package/dist/client/http/fetchHero.d.ts.map +0 -1
  314. package/dist/client/http/fetchHero.js +0 -55
  315. package/dist/client/http/fetchMainInfos.d.ts +0 -17
  316. package/dist/client/http/fetchMainInfos.d.ts.map +0 -1
  317. package/dist/client/http/fetchMainInfos.js +0 -44
  318. package/dist/client/http/fetchVideos.d.ts +0 -13
  319. package/dist/client/http/fetchVideos.d.ts.map +0 -1
  320. package/dist/client/http/fetchVideos.js +0 -36
  321. package/dist/client/http/index.d.ts +0 -19
  322. package/dist/client/http/index.d.ts.map +0 -1
  323. package/dist/client/http/index.js +0 -11
  324. package/dist/error-handling/circuit-breaker.d.ts +0 -262
  325. package/dist/error-handling/circuit-breaker.d.ts.map +0 -1
  326. package/dist/error-handling/circuit-breaker.js +0 -542
  327. package/dist/error-handling/retry.d.ts +0 -194
  328. package/dist/error-handling/retry.d.ts.map +0 -1
  329. package/dist/error-handling/retry.js +0 -450
  330. package/dist/errors/index.d.ts +0 -23
  331. package/dist/errors/index.d.ts.map +0 -1
  332. package/dist/errors/index.js +0 -40
  333. package/dist/generated/agents/index.d.ts +0 -8
  334. package/dist/generated/agents/index.d.ts.map +0 -1
  335. package/dist/generated/agents/index.js +0 -7
  336. package/dist/generated/components/index.d.ts +0 -8
  337. package/dist/generated/components/index.d.ts.map +0 -1
  338. package/dist/generated/components/index.js +0 -7
  339. package/dist/generated/functions/index.d.ts +0 -8
  340. package/dist/generated/functions/index.d.ts.map +0 -1
  341. package/dist/generated/functions/index.js +0 -7
  342. package/dist/generated/hooks/index.d.ts +0 -8
  343. package/dist/generated/hooks/index.d.ts.map +0 -1
  344. package/dist/generated/hooks/index.js +0 -7
  345. package/dist/generated/plans/index.d.ts +0 -8
  346. package/dist/generated/plans/index.d.ts.map +0 -1
  347. package/dist/generated/plans/index.js +0 -7
  348. package/dist/generated/prompts/index.d.ts +0 -8
  349. package/dist/generated/prompts/index.d.ts.map +0 -1
  350. package/dist/generated/prompts/index.js +0 -7
  351. package/dist/generated/tools/index.d.ts +0 -8
  352. package/dist/generated/tools/index.d.ts.map +0 -1
  353. package/dist/generated/tools/index.js +0 -7
  354. package/dist/generated/types/supabase.d.ts +0 -193
  355. package/dist/generated/types/supabase.d.ts.map +0 -1
  356. package/dist/generated/types/supabase.js +0 -5
  357. package/dist/optimization/asset-optimizer.d.ts +0 -202
  358. package/dist/optimization/asset-optimizer.d.ts.map +0 -1
  359. package/dist/optimization/asset-optimizer.js +0 -312
  360. package/dist/optimization/build-optimizer.d.ts +0 -202
  361. package/dist/optimization/build-optimizer.d.ts.map +0 -1
  362. package/dist/optimization/build-optimizer.js +0 -271
  363. package/dist/optimization/bundle-analyzer.d.ts +0 -98
  364. package/dist/optimization/bundle-analyzer.d.ts.map +0 -1
  365. package/dist/optimization/bundle-analyzer.js +0 -322
  366. package/dist/optimization/code-splitting.d.ts +0 -131
  367. package/dist/optimization/code-splitting.d.ts.map +0 -1
  368. package/dist/optimization/code-splitting.js +0 -277
  369. package/dist/plugin/index.d.ts +0 -12
  370. package/dist/plugin/index.d.ts.map +0 -1
  371. package/dist/plugin/index.js +0 -4
  372. package/dist/security/audit.d.ts +0 -188
  373. package/dist/security/audit.d.ts.map +0 -1
  374. package/dist/security/audit.js +0 -431
  375. package/dist/security/auth.d.ts +0 -241
  376. package/dist/security/auth.d.ts.map +0 -1
  377. package/dist/security/auth.js +0 -476
  378. package/dist/security/authorization.d.ts +0 -235
  379. package/dist/security/authorization.d.ts.map +0 -1
  380. package/dist/security/authorization.js +0 -434
  381. package/dist/security/encryption.d.ts +0 -214
  382. package/dist/security/encryption.d.ts.map +0 -1
  383. package/dist/security/encryption.js +0 -517
  384. package/dist/security/gdpr.d.ts +0 -300
  385. package/dist/security/gdpr.d.ts.map +0 -1
  386. package/dist/security/gdpr.js +0 -465
  387. package/dist/security/headers.d.ts +0 -182
  388. package/dist/security/headers.d.ts.map +0 -1
  389. package/dist/security/headers.js +0 -402
  390. package/dist/utils/jwt-validation.d.ts +0 -14
  391. package/dist/utils/jwt-validation.d.ts.map +0 -1
  392. package/dist/utils/jwt-validation.js +0 -36
  393. package/dist/utils/request-headers.d.ts +0 -15
  394. package/dist/utils/request-headers.d.ts.map +0 -1
  395. package/dist/utils/request-headers.js +0 -31
@@ -1,177 +0,0 @@
1
- /**
2
- * Edge Caching and ISR (Incremental Static Regeneration)
3
- *
4
- * Utilities for Next.js edge caching, ISR, and on-demand revalidation
5
- */
6
- import type { NextRequest, NextResponse } from 'next/server';
7
- /**
8
- * ISR Configuration
9
- */
10
- export interface ISRConfig {
11
- revalidate?: number | false;
12
- tags?: string[];
13
- dynamicParams?: boolean;
14
- }
15
- export declare const ISR_PRESETS: {
16
- readonly always: {
17
- readonly revalidate: 0;
18
- };
19
- readonly minute: {
20
- readonly revalidate: 60;
21
- };
22
- readonly fiveMinutes: {
23
- readonly revalidate: 300;
24
- };
25
- readonly hourly: {
26
- readonly revalidate: 3600;
27
- };
28
- readonly daily: {
29
- readonly revalidate: 86400;
30
- };
31
- readonly never: {
32
- readonly revalidate: false;
33
- };
34
- };
35
- /**
36
- * Generate static params for ISR
37
- */
38
- export declare function generateStaticParams<T>(fetchFn: () => Promise<T[]>, mapFn: (item: T) => Record<string, string>): Promise<Array<Record<string, string>>>;
39
- /**
40
- * Revalidate tag
41
- */
42
- export declare function revalidateTag(tag: string, secret?: string): Promise<{
43
- revalidated: boolean;
44
- error?: string;
45
- }>;
46
- /**
47
- * Revalidate path
48
- */
49
- export declare function revalidatePath(path: string, secret?: string): Promise<{
50
- revalidated: boolean;
51
- error?: string;
52
- }>;
53
- /**
54
- * Revalidate multiple paths
55
- */
56
- export declare function revalidatePaths(paths: string[], secret?: string): Promise<{
57
- revalidated: number;
58
- failed: number;
59
- errors: Array<{
60
- path: string;
61
- error: string;
62
- }>;
63
- }>;
64
- /**
65
- * Revalidate multiple tags
66
- */
67
- export declare function revalidateTags(tags: string[], secret?: string): Promise<{
68
- revalidated: number;
69
- failed: number;
70
- errors: Array<{
71
- tag: string;
72
- error: string;
73
- }>;
74
- }>;
75
- /**
76
- * Edge middleware cache configuration
77
- */
78
- export interface EdgeCacheConfig {
79
- cache?: 'force-cache' | 'no-cache' | 'no-store' | 'only-if-cached';
80
- next?: {
81
- revalidate?: number | false;
82
- tags?: string[];
83
- };
84
- }
85
- /**
86
- * Create edge cached fetch
87
- */
88
- export declare function createEdgeCachedFetch(config?: EdgeCacheConfig): <T>(url: string, options?: RequestInit) => Promise<T>;
89
- /**
90
- * Unstable cache wrapper (Next.js 14+)
91
- */
92
- export declare function createCachedFunction<TArgs extends unknown[], TReturn>(fn: (...args: TArgs) => Promise<TReturn>, _options?: {
93
- tags?: string[];
94
- revalidate?: number | false;
95
- }): (...args: TArgs) => Promise<TReturn>;
96
- /**
97
- * Edge rate limiting with cache
98
- */
99
- export interface EdgeRateLimitConfig {
100
- limit: number;
101
- window: number;
102
- key?: (request: NextRequest) => string;
103
- }
104
- export declare class EdgeRateLimiter {
105
- private config;
106
- private cache;
107
- constructor(config: EdgeRateLimitConfig);
108
- /**
109
- * Check rate limit
110
- */
111
- check(request: NextRequest): {
112
- allowed: boolean;
113
- limit: number;
114
- remaining: number;
115
- reset: number;
116
- };
117
- /**
118
- * Clean up expired entries
119
- */
120
- cleanup(): void;
121
- }
122
- /**
123
- * Edge geolocation caching
124
- */
125
- export interface GeoLocation {
126
- country?: string;
127
- region?: string;
128
- city?: string;
129
- latitude?: number;
130
- longitude?: number;
131
- }
132
- export declare function getGeoLocation(request: NextRequest): GeoLocation | null;
133
- /**
134
- * Edge A/B testing with cache
135
- */
136
- export declare function getABTestVariant(request: NextRequest, testName: string, variants: string[]): string;
137
- /**
138
- * Edge personalization cache
139
- */
140
- export interface PersonalizationConfig {
141
- userId?: string;
142
- preferences?: Record<string, unknown>;
143
- location?: GeoLocation;
144
- device?: 'mobile' | 'tablet' | 'desktop';
145
- variant?: string;
146
- }
147
- export declare function getPersonalizationConfig(request: NextRequest): PersonalizationConfig;
148
- /**
149
- * Edge cache headers helper
150
- */
151
- export declare function setEdgeCacheHeaders(response: NextResponse, config: {
152
- maxAge?: number;
153
- sMaxAge?: number;
154
- staleWhileRevalidate?: number;
155
- tags?: string[];
156
- }): NextResponse;
157
- /**
158
- * Preload links for critical resources
159
- */
160
- export declare function addPreloadLinks(response: NextResponse, resources: Array<{
161
- href: string;
162
- as: string;
163
- type?: string;
164
- crossorigin?: boolean;
165
- }>): NextResponse;
166
- /**
167
- * Cache warming for ISR pages
168
- */
169
- export declare function warmISRCache(paths: string[], baseURL?: string): Promise<{
170
- warmed: number;
171
- failed: number;
172
- errors: Array<{
173
- path: string;
174
- error: string;
175
- }>;
176
- }>;
177
- //# sourceMappingURL=edge-cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edge-cache.d.ts","sourceRoot":"","sources":["../../src/caching/edge-cache.ts"],"names":[],"mappings":"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"}
@@ -1,385 +0,0 @@
1
- /**
2
- * Edge Caching and ISR (Incremental Static Regeneration)
3
- *
4
- * Utilities for Next.js edge caching, ISR, and on-demand revalidation
5
- */
6
- import { logger } from '../observability/logger.js';
7
- export const ISR_PRESETS = {
8
- // Revalidate every request
9
- always: {
10
- revalidate: 0,
11
- },
12
- // Revalidate every minute
13
- minute: {
14
- revalidate: 60,
15
- },
16
- // Revalidate every 5 minutes
17
- fiveMinutes: {
18
- revalidate: 300,
19
- },
20
- // Revalidate every hour
21
- hourly: {
22
- revalidate: 3600,
23
- },
24
- // Revalidate daily
25
- daily: {
26
- revalidate: 86400,
27
- },
28
- // Never revalidate (static)
29
- never: {
30
- revalidate: false,
31
- },
32
- };
33
- /**
34
- * Generate static params for ISR
35
- */
36
- export async function generateStaticParams(fetchFn, mapFn) {
37
- try {
38
- const items = await fetchFn();
39
- return items.map(mapFn);
40
- }
41
- catch (error) {
42
- logger.error('Failed to generate static params', error instanceof Error ? error : new Error(String(error)));
43
- return [];
44
- }
45
- }
46
- /**
47
- * Revalidate tag
48
- */
49
- export async function revalidateTag(tag, secret) {
50
- try {
51
- const url = new URL('/api/revalidate', process.env.NEXT_PUBLIC_URL || 'http://localhost:3000');
52
- const headers = { 'Content-Type': 'application/json' };
53
- if (secret) {
54
- headers['x-revalidate-secret'] = secret;
55
- }
56
- const response = await fetch(url.toString(), {
57
- method: 'POST',
58
- headers,
59
- body: JSON.stringify({ tag }),
60
- });
61
- const data = await response.json();
62
- return {
63
- revalidated: response.ok,
64
- error: data.error,
65
- };
66
- }
67
- catch (error) {
68
- return {
69
- revalidated: false,
70
- error: error instanceof Error ? error.message : 'Unknown error',
71
- };
72
- }
73
- }
74
- /**
75
- * Revalidate path
76
- */
77
- export async function revalidatePath(path, secret) {
78
- try {
79
- const url = new URL('/api/revalidate', process.env.NEXT_PUBLIC_URL || 'http://localhost:3000');
80
- const headers = { 'Content-Type': 'application/json' };
81
- if (secret) {
82
- headers['x-revalidate-secret'] = secret;
83
- }
84
- const response = await fetch(url.toString(), {
85
- method: 'POST',
86
- headers,
87
- body: JSON.stringify({ path }),
88
- });
89
- const data = await response.json();
90
- return {
91
- revalidated: response.ok,
92
- error: data.error,
93
- };
94
- }
95
- catch (error) {
96
- return {
97
- revalidated: false,
98
- error: error instanceof Error ? error.message : 'Unknown error',
99
- };
100
- }
101
- }
102
- /**
103
- * Revalidate multiple paths
104
- */
105
- export async function revalidatePaths(paths, secret) {
106
- const results = await Promise.allSettled(paths.map((path) => revalidatePath(path, secret)));
107
- let revalidated = 0;
108
- let failed = 0;
109
- const errors = [];
110
- for (let i = 0; i < results.length; i++) {
111
- const result = results[i];
112
- const path = paths[i];
113
- if (!(result && path)) {
114
- continue;
115
- }
116
- if (result.status === 'fulfilled' && result.value.revalidated) {
117
- revalidated++;
118
- }
119
- else {
120
- failed++;
121
- const error = result.status === 'fulfilled'
122
- ? result.value.error || 'Unknown error'
123
- : String(result.reason) || 'Unknown error';
124
- errors.push({ path, error });
125
- }
126
- }
127
- return { revalidated, failed, errors };
128
- }
129
- /**
130
- * Revalidate multiple tags
131
- */
132
- export async function revalidateTags(tags, secret) {
133
- const results = await Promise.allSettled(tags.map((tag) => revalidateTag(tag, secret)));
134
- let revalidated = 0;
135
- let failed = 0;
136
- const errors = [];
137
- for (let i = 0; i < results.length; i++) {
138
- const result = results[i];
139
- const tag = tags[i];
140
- if (!(result && tag)) {
141
- continue;
142
- }
143
- if (result.status === 'fulfilled' && result.value.revalidated) {
144
- revalidated++;
145
- }
146
- else {
147
- failed++;
148
- const error = result.status === 'fulfilled'
149
- ? result.value.error || 'Unknown error'
150
- : String(result.reason) || 'Unknown error';
151
- errors.push({ tag, error });
152
- }
153
- }
154
- return { revalidated, failed, errors };
155
- }
156
- /**
157
- * Create edge cached fetch
158
- */
159
- export function createEdgeCachedFetch(config = {}) {
160
- return async (url, options) => {
161
- const fetchOptions = {
162
- ...options,
163
- ...config,
164
- next: {
165
- ...options?.next,
166
- ...config.next,
167
- },
168
- };
169
- const response = await fetch(url, fetchOptions);
170
- if (!response.ok) {
171
- throw new Error(`Fetch failed: ${response.statusText}`);
172
- }
173
- return response.json();
174
- };
175
- }
176
- /**
177
- * Unstable cache wrapper (Next.js 14+)
178
- */
179
- export function createCachedFunction(fn, _options = {}) {
180
- // In production, this would use Next.js unstable_cache
181
- // For now, return the function as-is
182
- return fn;
183
- }
184
- export class EdgeRateLimiter {
185
- config;
186
- cache = new Map();
187
- constructor(config) {
188
- this.config = config;
189
- }
190
- /**
191
- * Check rate limit
192
- */
193
- check(request) {
194
- const key = this.config.key
195
- ? this.config.key(request)
196
- : request.headers.get('x-forwarded-for') || 'unknown';
197
- const now = Date.now();
198
- let entry = this.cache.get(key);
199
- // Reset if window expired
200
- if (!entry || now > entry.resetTime) {
201
- entry = {
202
- count: 0,
203
- resetTime: now + this.config.window,
204
- };
205
- this.cache.set(key, entry);
206
- }
207
- // Increment count
208
- entry.count++;
209
- const allowed = entry.count <= this.config.limit;
210
- const remaining = Math.max(0, this.config.limit - entry.count);
211
- return {
212
- allowed,
213
- limit: this.config.limit,
214
- remaining,
215
- reset: entry.resetTime,
216
- };
217
- }
218
- /**
219
- * Clean up expired entries
220
- */
221
- cleanup() {
222
- const now = Date.now();
223
- for (const [key, entry] of this.cache.entries()) {
224
- if (now > entry.resetTime) {
225
- this.cache.delete(key);
226
- }
227
- }
228
- }
229
- }
230
- export function getGeoLocation(request) {
231
- // Vercel edge headers
232
- const country = request.headers.get('x-vercel-ip-country');
233
- const region = request.headers.get('x-vercel-ip-country-region');
234
- const city = request.headers.get('x-vercel-ip-city');
235
- const latitude = request.headers.get('x-vercel-ip-latitude');
236
- const longitude = request.headers.get('x-vercel-ip-longitude');
237
- if (!country) {
238
- // Cloudflare headers
239
- const cfCountry = request.headers.get('cf-ipcountry');
240
- if (cfCountry) {
241
- return {
242
- country: cfCountry,
243
- };
244
- }
245
- return null;
246
- }
247
- return {
248
- country: country || undefined,
249
- region: region || undefined,
250
- city: city ? decodeURIComponent(city) : undefined,
251
- latitude: latitude ? parseFloat(latitude) : undefined,
252
- longitude: longitude ? parseFloat(longitude) : undefined,
253
- };
254
- }
255
- /**
256
- * Edge A/B testing with cache
257
- */
258
- export function getABTestVariant(request, testName, variants) {
259
- // Check cookie first
260
- const cookieName = `ab-test-${testName}`;
261
- const cookieVariant = request.cookies.get(cookieName)?.value;
262
- if (cookieVariant && variants.includes(cookieVariant)) {
263
- return cookieVariant;
264
- }
265
- // Assign variant based on IP hash
266
- const ip = request.headers.get('x-forwarded-for') || 'unknown';
267
- const hash = simpleHash(ip + testName);
268
- const variantIndex = hash % variants.length;
269
- const variant = variants[variantIndex];
270
- if (!variant) {
271
- throw new Error('No variant found for A/B test');
272
- }
273
- return variant;
274
- }
275
- /**
276
- * Simple hash function
277
- */
278
- function simpleHash(str) {
279
- let hash = 0;
280
- for (let i = 0; i < str.length; i++) {
281
- const char = str.charCodeAt(i);
282
- hash = (hash << 5) - hash + char;
283
- hash = hash & hash;
284
- }
285
- return Math.abs(hash);
286
- }
287
- export function getPersonalizationConfig(request) {
288
- const userAgent = request.headers.get('user-agent') || '';
289
- const device = getDeviceType(userAgent);
290
- const location = getGeoLocation(request);
291
- return {
292
- userId: request.cookies.get('user-id')?.value,
293
- location: location || undefined,
294
- device,
295
- };
296
- }
297
- /**
298
- * Detect device type
299
- */
300
- function getDeviceType(userAgent) {
301
- if (/mobile/i.test(userAgent) && !/tablet|ipad/i.test(userAgent)) {
302
- return 'mobile';
303
- }
304
- if (/tablet|ipad/i.test(userAgent)) {
305
- return 'tablet';
306
- }
307
- return 'desktop';
308
- }
309
- /**
310
- * Edge cache headers helper
311
- */
312
- export function setEdgeCacheHeaders(response, config) {
313
- const cacheControl = [];
314
- if (config.maxAge !== undefined) {
315
- cacheControl.push(`max-age=${config.maxAge}`);
316
- }
317
- if (config.sMaxAge !== undefined) {
318
- cacheControl.push(`s-maxage=${config.sMaxAge}`);
319
- }
320
- if (config.staleWhileRevalidate !== undefined) {
321
- cacheControl.push(`stale-while-revalidate=${config.staleWhileRevalidate}`);
322
- }
323
- if (cacheControl.length > 0) {
324
- response.headers.set('Cache-Control', cacheControl.join(', '));
325
- }
326
- if (config.tags && config.tags.length > 0) {
327
- response.headers.set('Cache-Tag', config.tags.join(','));
328
- }
329
- return response;
330
- }
331
- /**
332
- * Preload links for critical resources
333
- */
334
- export function addPreloadLinks(response, resources) {
335
- const links = resources.map((resource) => {
336
- const attrs = [`<${resource.href}>`, `rel="preload"`, `as="${resource.as}"`];
337
- if (resource.type) {
338
- attrs.push(`type="${resource.type}"`);
339
- }
340
- if (resource.crossorigin) {
341
- attrs.push('crossorigin');
342
- }
343
- return attrs.join('; ');
344
- });
345
- if (links.length > 0) {
346
- response.headers.set('Link', links.join(', '));
347
- }
348
- return response;
349
- }
350
- /**
351
- * Cache warming for ISR pages
352
- */
353
- export async function warmISRCache(paths, baseURL = process.env.NEXT_PUBLIC_URL || 'http://localhost:3000') {
354
- const results = await Promise.allSettled(paths.map(async (path) => {
355
- const url = new URL(path, baseURL);
356
- const response = await fetch(url.toString());
357
- if (!response.ok) {
358
- throw new Error(`${response.status} ${response.statusText}`);
359
- }
360
- return true;
361
- }));
362
- let warmed = 0;
363
- let failed = 0;
364
- const errors = [];
365
- for (let i = 0; i < results.length; i++) {
366
- const result = results[i];
367
- const path = paths[i];
368
- if (!(result && path)) {
369
- continue;
370
- }
371
- if (result.status === 'fulfilled') {
372
- warmed++;
373
- }
374
- else {
375
- failed++;
376
- errors.push({
377
- path,
378
- error: result.reason instanceof Error
379
- ? result.reason.message
380
- : String(result.reason) || 'Unknown error',
381
- });
382
- }
383
- }
384
- return { warmed, failed, errors };
385
- }