@revealui/core 0.0.1-pre.4 → 0.2.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.
- package/LICENSE +22 -202
- package/README.md +29 -180
- package/dist/api/compression.d.ts +83 -0
- package/dist/api/compression.d.ts.map +1 -0
- package/dist/api/compression.js +233 -0
- package/dist/api/payload-optimization.d.ts +138 -0
- package/dist/api/payload-optimization.d.ts.map +1 -0
- package/dist/api/payload-optimization.js +320 -0
- package/dist/api/rate-limit.d.ts +113 -0
- package/dist/api/rate-limit.d.ts.map +1 -0
- package/dist/api/rate-limit.js +301 -0
- package/dist/api/response-cache.d.ts +125 -0
- package/dist/api/response-cache.d.ts.map +1 -0
- package/dist/api/response-cache.js +335 -0
- package/dist/api/rest.d.ts +54 -0
- package/dist/api/rest.d.ts.map +1 -0
- package/dist/api/rest.js +464 -0
- package/dist/auth/access.d.ts +25 -0
- package/dist/auth/access.d.ts.map +1 -0
- package/dist/auth/access.js +20 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/cache/query-cache.d.ts +98 -0
- package/dist/cache/query-cache.d.ts.map +1 -0
- package/dist/cache/query-cache.js +260 -0
- package/dist/caching/app-cache.d.ts +237 -0
- package/dist/caching/app-cache.d.ts.map +1 -0
- package/dist/caching/app-cache.js +430 -0
- package/dist/caching/cdn-config.d.ts +155 -0
- package/dist/caching/cdn-config.d.ts.map +1 -0
- package/dist/caching/cdn-config.js +425 -0
- package/dist/caching/edge-cache.d.ts +177 -0
- package/dist/caching/edge-cache.d.ts.map +1 -0
- package/dist/caching/edge-cache.js +381 -0
- package/dist/caching/service-worker.d.ts +165 -0
- package/dist/caching/service-worker.d.ts.map +1 -0
- package/dist/caching/service-worker.js +437 -0
- package/dist/client/admin/RichText.d.ts +12 -0
- package/dist/client/admin/RichText.d.ts.map +1 -0
- package/dist/client/admin/RichText.js +5 -0
- package/dist/client/admin/components/AdminDashboard.d.ts +7 -0
- package/dist/client/admin/components/AdminDashboard.d.ts.map +1 -0
- package/dist/client/admin/components/AdminDashboard.js +318 -0
- package/dist/client/admin/components/CollectionList.d.ts +16 -0
- package/dist/client/admin/components/CollectionList.d.ts.map +1 -0
- package/dist/client/admin/components/CollectionList.js +67 -0
- package/dist/client/admin/components/DocumentForm.d.ts +11 -0
- package/dist/client/admin/components/DocumentForm.d.ts.map +1 -0
- package/dist/client/admin/components/DocumentForm.js +99 -0
- package/dist/client/admin/components/GlobalForm.d.ts +11 -0
- package/dist/client/admin/components/GlobalForm.d.ts.map +1 -0
- package/dist/client/admin/components/GlobalForm.js +74 -0
- package/dist/client/admin/i18n/en.d.ts +25 -0
- package/dist/client/admin/i18n/en.d.ts.map +1 -0
- package/dist/client/admin/i18n/en.js +25 -0
- package/dist/client/admin/index.d.ts +10 -0
- package/dist/client/admin/index.d.ts.map +1 -0
- package/dist/client/admin/index.js +10 -0
- package/dist/client/admin/layout.d.ts +10 -0
- package/dist/client/admin/layout.d.ts.map +1 -0
- package/dist/client/admin/layout.js +6 -0
- package/dist/client/admin/page.d.ts +38 -0
- package/dist/client/admin/page.d.ts.map +1 -0
- package/dist/client/admin/page.js +15 -0
- package/dist/client/admin/utils/apiClient.d.ts +110 -0
- package/dist/client/admin/utils/apiClient.d.ts.map +1 -0
- package/dist/client/admin/utils/apiClient.js +220 -0
- package/dist/client/admin/utils/auth.d.ts +27 -0
- package/dist/client/admin/utils/auth.d.ts.map +1 -0
- package/dist/client/admin/utils/auth.js +58 -0
- package/dist/client/admin/utils/index.d.ts +6 -0
- package/dist/client/admin/utils/index.d.ts.map +1 -0
- package/dist/client/admin/utils/index.js +5 -0
- package/dist/client/admin/utils/serializeConfig.d.ts +7 -0
- package/dist/client/admin/utils/serializeConfig.d.ts.map +1 -0
- package/dist/client/admin/utils/serializeConfig.js +35 -0
- package/dist/client/hooks.d.ts +18 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +29 -0
- package/dist/client/http/client.d.ts +15 -0
- package/dist/client/http/client.d.ts.map +1 -0
- package/dist/client/http/client.js +49 -0
- package/dist/client/http/fetchBanner.d.ts +18 -0
- package/dist/client/http/fetchBanner.d.ts.map +1 -0
- package/dist/client/http/fetchBanner.js +44 -0
- package/dist/client/http/fetchCard.d.ts +18 -0
- package/dist/client/http/fetchCard.d.ts.map +1 -0
- package/dist/client/http/fetchCard.js +46 -0
- package/dist/client/http/fetchEvents.d.ts +18 -0
- package/dist/client/http/fetchEvents.d.ts.map +1 -0
- package/dist/client/http/fetchEvents.js +44 -0
- package/dist/client/http/fetchHero.d.ts +17 -0
- package/dist/client/http/fetchHero.d.ts.map +1 -0
- package/dist/client/http/fetchHero.js +55 -0
- package/dist/client/http/fetchMainInfos.d.ts +17 -0
- package/dist/client/http/fetchMainInfos.d.ts.map +1 -0
- package/dist/client/http/fetchMainInfos.js +44 -0
- package/dist/client/http/fetchVideos.d.ts +13 -0
- package/dist/client/http/fetchVideos.d.ts.map +1 -0
- package/dist/client/http/fetchVideos.js +36 -0
- package/dist/client/http/index.d.ts +19 -0
- package/dist/client/http/index.d.ts.map +1 -0
- package/dist/client/http/index.js +11 -0
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +15 -0
- package/dist/client/richtext/RichTextEditor.d.ts +48 -0
- package/dist/client/richtext/RichTextEditor.d.ts.map +1 -0
- package/dist/client/richtext/RichTextEditor.js +360 -0
- package/dist/client/richtext/components/ImageNodeComponent.d.ts +9 -0
- package/dist/client/richtext/components/ImageNodeComponent.d.ts.map +1 -0
- package/dist/client/richtext/components/ImageNodeComponent.js +99 -0
- package/dist/client/richtext/components/ImageUploadButton.d.ts +11 -0
- package/dist/client/richtext/components/ImageUploadButton.d.ts.map +1 -0
- package/dist/client/richtext/components/ImageUploadButton.js +103 -0
- package/dist/client/richtext/index.d.ts +92 -0
- package/dist/client/richtext/index.d.ts.map +1 -0
- package/dist/client/richtext/index.js +74 -0
- package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts +20 -0
- package/dist/client/richtext/nodes/DecoratorBlockNode.d.ts.map +1 -0
- package/dist/client/richtext/nodes/DecoratorBlockNode.js +29 -0
- package/dist/client/richtext/nodes/ImageNode.d.ts +51 -0
- package/dist/client/richtext/nodes/ImageNode.d.ts.map +1 -0
- package/dist/client/richtext/nodes/ImageNode.js +95 -0
- package/dist/client/richtext/plugins/CollaborationPlugin.d.ts +13 -0
- package/dist/client/richtext/plugins/CollaborationPlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/CollaborationPlugin.js +8 -0
- package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts +4 -0
- package/dist/client/richtext/plugins/CursorsOverlayPlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/CursorsOverlayPlugin.js +50 -0
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts +7 -0
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/FloatingToolbarPlugin.js +248 -0
- package/dist/client/richtext/plugins/ImagePlugin.d.ts +3 -0
- package/dist/client/richtext/plugins/ImagePlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/ImagePlugin.js +73 -0
- package/dist/client/richtext/plugins/PastePlugin.d.ts +2 -0
- package/dist/client/richtext/plugins/PastePlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/PastePlugin.js +36 -0
- package/dist/client/richtext/plugins/ToolbarPlugin.d.ts +8 -0
- package/dist/client/richtext/plugins/ToolbarPlugin.d.ts.map +1 -0
- package/dist/client/richtext/plugins/ToolbarPlugin.js +204 -0
- package/dist/client/ui/index.d.ts +111 -0
- package/dist/client/ui/index.d.ts.map +1 -0
- package/dist/client/ui/index.js +130 -0
- package/dist/collections/CollectionOperations.d.ts +27 -0
- package/dist/collections/CollectionOperations.d.ts.map +1 -0
- package/dist/collections/CollectionOperations.js +34 -0
- package/dist/collections/hooks.d.ts +11 -0
- package/dist/collections/hooks.d.ts.map +1 -0
- package/dist/collections/hooks.js +35 -0
- package/dist/collections/index.d.ts +2 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +1 -0
- package/dist/collections/operations/create.d.ts +10 -0
- package/dist/collections/operations/create.d.ts.map +1 -0
- package/dist/collections/operations/create.js +101 -0
- package/dist/collections/operations/delete.d.ts +10 -0
- package/dist/collections/operations/delete.d.ts.map +1 -0
- package/dist/collections/operations/delete.js +16 -0
- package/dist/collections/operations/fieldHooks.d.ts +21 -0
- package/dist/collections/operations/fieldHooks.d.ts.map +1 -0
- package/dist/collections/operations/fieldHooks.js +51 -0
- package/dist/collections/operations/find.d.ts +10 -0
- package/dist/collections/operations/find.d.ts.map +1 -0
- package/dist/collections/operations/find.js +124 -0
- package/dist/collections/operations/findById.d.ts +15 -0
- package/dist/collections/operations/findById.d.ts.map +1 -0
- package/dist/collections/operations/findById.js +59 -0
- package/dist/collections/operations/update.d.ts +10 -0
- package/dist/collections/operations/update.d.ts.map +1 -0
- package/dist/collections/operations/update.js +134 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +61 -0
- package/dist/config/runtime.d.ts +22 -0
- package/dist/config/runtime.d.ts.map +1 -0
- package/dist/config/runtime.js +32 -0
- package/dist/config/utils.d.ts +12 -0
- package/dist/config/utils.d.ts.map +1 -0
- package/dist/config/utils.js +20 -0
- package/dist/database/index.d.ts +1 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +6 -0
- package/dist/database/ssl-config.d.ts +9 -0
- package/dist/database/ssl-config.d.ts.map +1 -0
- package/dist/database/ssl-config.js +7 -0
- package/dist/database/type-adapter.d.ts +113 -0
- package/dist/database/type-adapter.d.ts.map +1 -0
- package/dist/database/type-adapter.js +97 -0
- package/dist/database/universal-postgres.d.ts +45 -0
- package/dist/database/universal-postgres.d.ts.map +1 -0
- package/dist/database/universal-postgres.js +526 -0
- package/dist/dataloader.d.ts +26 -0
- package/dist/dataloader.d.ts.map +1 -0
- package/dist/dataloader.js +162 -0
- package/dist/error-handling/circuit-breaker.d.ts +262 -0
- package/dist/error-handling/circuit-breaker.d.ts.map +1 -0
- package/dist/error-handling/circuit-breaker.js +542 -0
- package/dist/error-handling/error-boundary.d.ts +94 -0
- package/dist/error-handling/error-boundary.d.ts.map +1 -0
- package/dist/error-handling/error-boundary.js +285 -0
- package/dist/error-handling/error-reporter.d.ts +213 -0
- package/dist/error-handling/error-reporter.d.ts.map +1 -0
- package/dist/error-handling/error-reporter.js +506 -0
- package/dist/error-handling/fallback-components.d.ts +131 -0
- package/dist/error-handling/fallback-components.d.ts.map +1 -0
- package/dist/error-handling/fallback-components.js +371 -0
- package/dist/error-handling/index.d.ts +16 -0
- package/dist/error-handling/index.d.ts.map +1 -0
- package/dist/error-handling/index.js +15 -0
- package/dist/error-handling/retry.d.ts +194 -0
- package/dist/error-handling/retry.d.ts.map +1 -0
- package/dist/error-handling/retry.js +450 -0
- package/dist/errors/index.d.ts +23 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +40 -0
- package/dist/factories/builders.d.ts +50 -0
- package/dist/factories/builders.d.ts.map +1 -0
- package/dist/factories/builders.js +77 -0
- package/dist/factories/index.d.ts +2 -0
- package/dist/factories/index.d.ts.map +1 -0
- package/dist/factories/index.js +1 -0
- package/dist/features.d.ts +82 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +89 -0
- package/dist/fieldTraversal.d.ts +26 -0
- package/dist/fieldTraversal.d.ts.map +1 -0
- package/dist/fieldTraversal.js +132 -0
- package/dist/fields/config/types.d.ts +48 -0
- package/dist/fields/config/types.d.ts.map +1 -0
- package/dist/fields/config/types.js +20 -0
- package/dist/fields/getDefaultValue.d.ts +16 -0
- package/dist/fields/getDefaultValue.d.ts.map +1 -0
- package/dist/fields/getDefaultValue.js +20 -0
- package/dist/fields/getFieldPaths.d.ts +25 -0
- package/dist/fields/getFieldPaths.d.ts.map +1 -0
- package/dist/fields/getFieldPaths.js +23 -0
- package/dist/fields/hooks/afterRead/index.d.ts +36 -0
- package/dist/fields/hooks/afterRead/index.d.ts.map +1 -0
- package/dist/fields/hooks/afterRead/index.js +70 -0
- package/dist/fields/hooks/afterRead/promise.d.ts +46 -0
- package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -0
- package/dist/fields/hooks/afterRead/promise.js +178 -0
- package/dist/fields/hooks/afterRead/traverseFields.d.ts +44 -0
- package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -0
- package/dist/fields/hooks/afterRead/traverseFields.js +37 -0
- package/dist/generated/agents/index.d.ts +8 -0
- package/dist/generated/agents/index.d.ts.map +1 -0
- package/dist/generated/agents/index.js +7 -0
- package/dist/generated/components/index.d.ts +8 -0
- package/dist/generated/components/index.d.ts.map +1 -0
- package/dist/generated/components/index.js +7 -0
- package/dist/generated/functions/index.d.ts +8 -0
- package/dist/generated/functions/index.d.ts.map +1 -0
- package/dist/generated/functions/index.js +7 -0
- package/dist/generated/hooks/index.d.ts +8 -0
- package/dist/generated/hooks/index.d.ts.map +1 -0
- package/dist/generated/hooks/index.js +7 -0
- package/dist/generated/index.d.ts +10 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +9 -0
- package/dist/generated/plans/index.d.ts +8 -0
- package/dist/generated/plans/index.d.ts.map +1 -0
- package/dist/generated/plans/index.js +7 -0
- package/dist/generated/prompts/index.d.ts +8 -0
- package/dist/generated/prompts/index.d.ts.map +1 -0
- package/dist/generated/prompts/index.js +7 -0
- package/dist/generated/tools/index.d.ts +8 -0
- package/dist/generated/tools/index.d.ts.map +1 -0
- package/dist/generated/tools/index.js +7 -0
- package/dist/generated/types/cms.d.ts +1766 -0
- package/dist/generated/types/cms.d.ts.map +1 -0
- package/dist/generated/types/cms.js +12 -0
- package/dist/generated/types/index.d.ts +19 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +28 -0
- package/dist/generated/types/neon.d.ts +11 -0
- package/dist/generated/types/neon.d.ts.map +1 -0
- package/dist/generated/types/neon.js +11 -0
- package/dist/generated/types/supabase.d.ts +193 -0
- package/dist/generated/types/supabase.d.ts.map +1 -0
- package/dist/generated/types/supabase.js +5 -0
- package/dist/globals/GlobalOperations.d.ts +24 -0
- package/dist/globals/GlobalOperations.d.ts.map +1 -0
- package/dist/globals/GlobalOperations.js +149 -0
- package/dist/globals/index.d.ts +2 -0
- package/dist/globals/index.d.ts.map +1 -0
- package/dist/globals/index.js +1 -0
- package/dist/index.d.ts +64 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -33
- package/dist/instance/RevealUIInstance.d.ts +6 -0
- package/dist/instance/RevealUIInstance.d.ts.map +1 -0
- package/dist/instance/RevealUIInstance.js +312 -0
- package/dist/instance/index.d.ts +3 -0
- package/dist/instance/index.d.ts.map +1 -0
- package/dist/instance/index.js +2 -0
- package/dist/instance/logger.d.ts +31 -0
- package/dist/instance/logger.d.ts.map +1 -0
- package/dist/instance/logger.js +42 -0
- package/dist/instance/methods/create.d.ts +10 -0
- package/dist/instance/methods/create.d.ts.map +1 -0
- package/dist/instance/methods/create.js +38 -0
- package/dist/instance/methods/delete.d.ts +10 -0
- package/dist/instance/methods/delete.d.ts.map +1 -0
- package/dist/instance/methods/delete.js +24 -0
- package/dist/instance/methods/find.d.ts +10 -0
- package/dist/instance/methods/find.d.ts.map +1 -0
- package/dist/instance/methods/find.js +23 -0
- package/dist/instance/methods/findById.d.ts +13 -0
- package/dist/instance/methods/findById.d.ts.map +1 -0
- package/dist/instance/methods/findById.js +23 -0
- package/dist/instance/methods/hooks.d.ts +14 -0
- package/dist/instance/methods/hooks.d.ts.map +1 -0
- package/dist/instance/methods/hooks.js +32 -0
- package/dist/instance/methods/update.d.ts +10 -0
- package/dist/instance/methods/update.d.ts.map +1 -0
- package/dist/instance/methods/update.js +42 -0
- package/dist/license.d.ts +73 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +157 -0
- package/dist/monitoring/alerts.d.ts +118 -0
- package/dist/monitoring/alerts.d.ts.map +1 -0
- package/dist/monitoring/alerts.js +324 -0
- package/dist/monitoring/cleanup-manager.d.ts +71 -0
- package/dist/monitoring/cleanup-manager.d.ts.map +1 -0
- package/dist/monitoring/cleanup-manager.js +226 -0
- package/dist/monitoring/health-monitor.d.ts +22 -0
- package/dist/monitoring/health-monitor.d.ts.map +1 -0
- package/dist/monitoring/health-monitor.js +142 -0
- package/dist/monitoring/index.d.ts +14 -0
- package/dist/monitoring/index.d.ts.map +1 -0
- package/dist/monitoring/index.js +17 -0
- package/dist/monitoring/process-registry.d.ts +97 -0
- package/dist/monitoring/process-registry.d.ts.map +1 -0
- package/dist/monitoring/process-registry.js +222 -0
- package/dist/monitoring/query-monitor.d.ts +153 -0
- package/dist/monitoring/query-monitor.d.ts.map +1 -0
- package/dist/monitoring/query-monitor.js +209 -0
- package/dist/monitoring/types.d.ts +231 -0
- package/dist/monitoring/types.d.ts.map +1 -0
- package/dist/monitoring/types.js +42 -0
- package/dist/monitoring/zombie-detector.d.ts +81 -0
- package/dist/monitoring/zombie-detector.d.ts.map +1 -0
- package/dist/monitoring/zombie-detector.js +231 -0
- package/dist/nextjs/index.d.ts +4 -0
- package/dist/nextjs/index.d.ts.map +1 -0
- package/dist/nextjs/index.js +3 -0
- package/dist/nextjs/utilities.d.ts +5 -0
- package/dist/nextjs/utilities.d.ts.map +1 -0
- package/dist/nextjs/utilities.js +16 -0
- package/dist/nextjs/withRevealUI.d.ts +20 -0
- package/dist/nextjs/withRevealUI.d.ts.map +1 -0
- package/dist/nextjs/withRevealUI.js +181 -0
- package/dist/observability/alerts.d.ts +138 -0
- package/dist/observability/alerts.d.ts.map +1 -0
- package/dist/observability/alerts.js +390 -0
- package/dist/observability/health-check.d.ts +95 -0
- package/dist/observability/health-check.d.ts.map +1 -0
- package/dist/observability/health-check.js +345 -0
- package/dist/observability/index.d.ts +12 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +11 -0
- package/dist/observability/logger.d.ts +47 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +140 -0
- package/dist/observability/metrics.d.ts +205 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +429 -0
- package/dist/observability/tracing.d.ts +149 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +381 -0
- package/dist/optimization/asset-optimizer.d.ts +202 -0
- package/dist/optimization/asset-optimizer.d.ts.map +1 -0
- package/dist/optimization/asset-optimizer.js +312 -0
- package/dist/optimization/build-optimizer.d.ts +202 -0
- package/dist/optimization/build-optimizer.d.ts.map +1 -0
- package/dist/optimization/build-optimizer.js +271 -0
- package/dist/optimization/bundle-analyzer.d.ts +98 -0
- package/dist/optimization/bundle-analyzer.d.ts.map +1 -0
- package/dist/optimization/bundle-analyzer.js +322 -0
- package/dist/optimization/code-splitting.d.ts +144 -0
- package/dist/optimization/code-splitting.d.ts.map +1 -0
- package/dist/optimization/code-splitting.js +290 -0
- package/dist/plugin/index.d.ts +12 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +4 -0
- package/dist/plugins/form-builder.d.ts +115 -0
- package/dist/plugins/form-builder.d.ts.map +1 -0
- package/dist/plugins/form-builder.js +239 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/nested-docs.d.ts +8 -0
- package/dist/plugins/nested-docs.d.ts.map +1 -0
- package/dist/plugins/nested-docs.js +67 -0
- package/dist/plugins/redirects.d.ts +17 -0
- package/dist/plugins/redirects.d.ts.map +1 -0
- package/dist/plugins/redirects.js +62 -0
- package/dist/queries/index.d.ts +2 -0
- package/dist/queries/index.d.ts.map +1 -0
- package/dist/queries/index.js +1 -0
- package/dist/queries/queryBuilder.d.ts +47 -0
- package/dist/queries/queryBuilder.d.ts.map +1 -0
- package/dist/queries/queryBuilder.js +252 -0
- package/dist/relationships/analyzer.d.ts +39 -0
- package/dist/relationships/analyzer.d.ts.map +1 -0
- package/dist/relationships/analyzer.js +127 -0
- package/dist/relationships/index.d.ts +3 -0
- package/dist/relationships/index.d.ts.map +1 -0
- package/dist/relationships/index.js +2 -0
- package/dist/relationships/populate-helpers.d.ts +104 -0
- package/dist/relationships/populate-helpers.d.ts.map +1 -0
- package/dist/relationships/populate-helpers.js +187 -0
- package/dist/relationships/population.d.ts +42 -0
- package/dist/relationships/population.d.ts.map +1 -0
- package/dist/relationships/population.js +188 -0
- package/dist/revealui.d.ts +46 -0
- package/dist/revealui.d.ts.map +1 -0
- package/dist/revealui.js +92 -0
- package/dist/richtext/exports/client/rcc.d.ts +37 -0
- package/dist/richtext/exports/client/rcc.d.ts.map +1 -0
- package/dist/richtext/exports/client/rcc.js +182 -0
- package/dist/richtext/exports/server/rsc.d.ts +117 -0
- package/dist/richtext/exports/server/rsc.d.ts.map +1 -0
- package/dist/richtext/exports/server/rsc.js +288 -0
- package/dist/richtext/index.d.ts +161 -0
- package/dist/richtext/index.d.ts.map +1 -0
- package/dist/richtext/index.js +243 -0
- package/dist/richtext/lexical.d.ts +23 -0
- package/dist/richtext/lexical.d.ts.map +1 -0
- package/dist/richtext/lexical.js +35 -0
- package/dist/security/audit.d.ts +188 -0
- package/dist/security/audit.d.ts.map +1 -0
- package/dist/security/audit.js +431 -0
- package/dist/security/auth.d.ts +241 -0
- package/dist/security/auth.d.ts.map +1 -0
- package/dist/security/auth.js +474 -0
- package/dist/security/authorization.d.ts +235 -0
- package/dist/security/authorization.d.ts.map +1 -0
- package/dist/security/authorization.js +434 -0
- package/dist/security/encryption.d.ts +214 -0
- package/dist/security/encryption.d.ts.map +1 -0
- package/dist/security/encryption.js +506 -0
- package/dist/security/gdpr.d.ts +300 -0
- package/dist/security/gdpr.d.ts.map +1 -0
- package/dist/security/gdpr.js +470 -0
- package/dist/security/headers.d.ts +182 -0
- package/dist/security/headers.d.ts.map +1 -0
- package/dist/security/headers.js +402 -0
- package/dist/security/index.d.ts +19 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +18 -0
- package/dist/server/index.d.ts +21 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +28 -0
- package/dist/server/renderPage.d.ts +69 -0
- package/dist/server/renderPage.d.ts.map +1 -0
- package/dist/server/renderPage.js +109 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/vercel-blob.d.ts +17 -0
- package/dist/storage/vercel-blob.d.ts.map +1 -0
- package/dist/storage/vercel-blob.js +83 -0
- package/dist/translations/index.d.ts +17 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +1 -0
- package/dist/types/access.d.ts +67 -0
- package/dist/types/access.d.ts.map +1 -0
- package/dist/types/access.js +8 -0
- package/dist/types/api.d.ts +57 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +8 -0
- package/dist/types/cms.d.ts +8 -0
- package/dist/types/cms.d.ts.map +1 -0
- package/dist/types/cms.js +6 -0
- package/dist/types/config.d.ts +152 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +9 -0
- package/dist/types/core.d.ts +11 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +9 -0
- package/dist/types/extensions.d.ts +116 -0
- package/dist/types/extensions.d.ts.map +1 -0
- package/dist/types/extensions.js +8 -0
- package/dist/types/frontend.d.ts +53 -0
- package/dist/types/frontend.d.ts.map +1 -0
- package/dist/types/frontend.js +7 -0
- package/dist/types/generated.d.ts +14 -0
- package/dist/types/generated.d.ts.map +1 -0
- package/dist/types/generated.js +11 -0
- package/dist/types/hooks.d.ts +53 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +8 -0
- package/dist/types/index.d.ts +49 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +61 -0
- package/dist/types/interfaces/app.d.ts +50 -0
- package/dist/types/interfaces/app.d.ts.map +1 -0
- package/dist/types/interfaces/app.js +5 -0
- package/dist/types/jobs.d.ts +112 -0
- package/dist/types/jobs.d.ts.map +1 -0
- package/dist/types/jobs.js +7 -0
- package/dist/types/legacy.d.ts +147 -0
- package/dist/types/legacy.d.ts.map +1 -0
- package/dist/types/legacy.js +8 -0
- package/dist/types/plugins.d.ts +17 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +8 -0
- package/dist/types/query.d.ts +99 -0
- package/dist/types/query.d.ts.map +1 -0
- package/dist/types/query.js +24 -0
- package/dist/types/request.d.ts +40 -0
- package/dist/types/request.d.ts.map +1 -0
- package/dist/types/request.js +8 -0
- package/dist/types/richtext.d.ts +23 -0
- package/dist/types/richtext.d.ts.map +1 -0
- package/dist/types/richtext.js +8 -0
- package/dist/types/runtime.d.ts +216 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/runtime.js +9 -0
- package/dist/types/schema.d.ts +9 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +7 -0
- package/dist/types/user.d.ts +48 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +8 -0
- package/dist/utils/access-conversion.d.ts +17 -0
- package/dist/utils/access-conversion.d.ts.map +1 -0
- package/dist/utils/access-conversion.js +96 -0
- package/dist/utils/api-wrapper.d.ts +63 -0
- package/dist/utils/api-wrapper.d.ts.map +1 -0
- package/dist/utils/api-wrapper.js +151 -0
- package/dist/utils/block-conversion.d.ts +21 -0
- package/dist/utils/block-conversion.d.ts.map +1 -0
- package/dist/utils/block-conversion.js +109 -0
- package/dist/utils/cache.d.ts +86 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +154 -0
- package/dist/utils/deep-clone.d.ts +25 -0
- package/dist/utils/deep-clone.d.ts.map +1 -0
- package/dist/utils/deep-clone.js +115 -0
- package/dist/utils/error-responses.d.ts +57 -0
- package/dist/utils/error-responses.d.ts.map +1 -0
- package/dist/utils/error-responses.js +96 -0
- package/dist/utils/errors.d.ts +97 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +397 -0
- package/dist/utils/field-conversion.d.ts +40 -0
- package/dist/utils/field-conversion.d.ts.map +1 -0
- package/dist/utils/field-conversion.js +275 -0
- package/dist/utils/flattenResult.d.ts +7 -0
- package/dist/utils/flattenResult.d.ts.map +1 -0
- package/dist/utils/flattenResult.js +23 -0
- package/dist/utils/getBlockSelect.d.ts +12 -0
- package/dist/utils/getBlockSelect.d.ts.map +1 -0
- package/dist/utils/getBlockSelect.js +12 -0
- package/dist/utils/getSelectMode.d.ts +8 -0
- package/dist/utils/getSelectMode.d.ts.map +1 -0
- package/dist/utils/getSelectMode.js +21 -0
- package/dist/utils/isValidID.d.ts +5 -0
- package/dist/utils/isValidID.d.ts.map +1 -0
- package/dist/utils/isValidID.js +13 -0
- package/dist/utils/json-parsing.d.ts +48 -0
- package/dist/utils/json-parsing.d.ts.map +1 -0
- package/dist/utils/json-parsing.js +130 -0
- package/dist/utils/jwt-validation.d.ts +14 -0
- package/dist/utils/jwt-validation.d.ts.map +1 -0
- package/dist/utils/jwt-validation.js +36 -0
- package/dist/utils/logger-client.d.ts +32 -0
- package/dist/utils/logger-client.d.ts.map +1 -0
- package/dist/utils/logger-client.js +55 -0
- package/dist/utils/logger-server.d.ts +32 -0
- package/dist/utils/logger-server.d.ts.map +1 -0
- package/dist/utils/logger-server.js +68 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +12 -0
- package/dist/utils/request-context.d.ts +143 -0
- package/dist/utils/request-context.d.ts.map +1 -0
- package/dist/utils/request-context.js +168 -0
- package/dist/utils/request-headers.d.ts +15 -0
- package/dist/utils/request-headers.d.ts.map +1 -0
- package/dist/utils/request-headers.js +31 -0
- package/dist/utils/stripUnselectedFields.d.ts +10 -0
- package/dist/utils/stripUnselectedFields.d.ts.map +1 -0
- package/dist/utils/stripUnselectedFields.js +20 -0
- package/dist/utils/type-guards.d.ts +33 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +63 -0
- package/dist/utils/user.d.ts +14 -0
- package/dist/utils/user.d.ts.map +1 -0
- package/dist/utils/user.js +15 -0
- package/package.json +250 -724
- package/LICENSE_SUMMARY.md +0 -55
- package/NOTICE +0 -34
- package/dist/exports/RenderErrorPage.js +0 -3
- package/dist/exports/__internal.js +0 -3
- package/dist/exports/abort.js +0 -3
- package/dist/exports/bin-entry.js +0 -5
- package/dist/exports/client.js +0 -3
- package/dist/exports/config.js +0 -1
- package/dist/exports/helpers.js +0 -1
- package/dist/exports/index.js +0 -33
- package/dist/exports/plugin.js +0 -3
- package/dist/exports/prerender.js +0 -3
- package/dist/exports/router.js +0 -3
- package/dist/exports/routing.js +0 -3
- package/dist/exports/server.js +0 -3
- package/dist/exports/setup.js +0 -3
- package/dist/exports/types.js +0 -1
- package/dist/integration/styles.css +0 -141
- package/dist/shared/RenderErrorPage.d.ts +0 -3
- package/dist/shared/RenderErrorPage.js +0 -3
- package/dist/shared/abort.js +0 -3
- package/dist/shared/route/routing.js +0 -3
package/dist/api/rest.js
ADDED
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RevealUI REST API Implementation
|
|
3
|
+
*
|
|
4
|
+
* Based on RevealUI CMS REST API but adapted for RevealUI.
|
|
5
|
+
*
|
|
6
|
+
* WARNING: This module is server-only.
|
|
7
|
+
* Do NOT import in client-side code or edge runtime.
|
|
8
|
+
*/
|
|
9
|
+
import { defaultLogger } from '../instance/logger.js';
|
|
10
|
+
function parseQueryParams(searchParams) {
|
|
11
|
+
const options = {};
|
|
12
|
+
// Parse depth
|
|
13
|
+
const depth = searchParams.get('depth');
|
|
14
|
+
if (depth) {
|
|
15
|
+
options.depth = parseInt(depth, 10);
|
|
16
|
+
}
|
|
17
|
+
// Parse locale
|
|
18
|
+
const locale = searchParams.get('locale');
|
|
19
|
+
if (locale) {
|
|
20
|
+
options.locale = locale;
|
|
21
|
+
}
|
|
22
|
+
// Parse fallbackLocale
|
|
23
|
+
const fallbackLocale = searchParams.get('fallbackLocale');
|
|
24
|
+
if (fallbackLocale) {
|
|
25
|
+
options.fallbackLocale = fallbackLocale;
|
|
26
|
+
}
|
|
27
|
+
// Parse overrideAccess
|
|
28
|
+
const overrideAccess = searchParams.get('overrideAccess');
|
|
29
|
+
if (overrideAccess !== null) {
|
|
30
|
+
options.overrideAccess = overrideAccess === 'true';
|
|
31
|
+
}
|
|
32
|
+
// Parse showHiddenFields
|
|
33
|
+
const showHiddenFields = searchParams.get('showHiddenFields');
|
|
34
|
+
if (showHiddenFields !== null) {
|
|
35
|
+
options.showHiddenFields = showHiddenFields === 'true';
|
|
36
|
+
}
|
|
37
|
+
// Parse draft
|
|
38
|
+
const draft = searchParams.get('draft');
|
|
39
|
+
if (draft !== null) {
|
|
40
|
+
options.draft = draft === 'true';
|
|
41
|
+
}
|
|
42
|
+
// Parse where (JSON)
|
|
43
|
+
const where = searchParams.get('where');
|
|
44
|
+
if (where) {
|
|
45
|
+
try {
|
|
46
|
+
options.where = JSON.parse(where);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Invalid JSON, ignore
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Parse limit
|
|
53
|
+
const limit = searchParams.get('limit');
|
|
54
|
+
if (limit) {
|
|
55
|
+
options.limit = parseInt(limit, 10);
|
|
56
|
+
}
|
|
57
|
+
// Parse page
|
|
58
|
+
const page = searchParams.get('page');
|
|
59
|
+
if (page) {
|
|
60
|
+
options.page = parseInt(page, 10);
|
|
61
|
+
}
|
|
62
|
+
// Parse sort
|
|
63
|
+
const sort = searchParams.get('sort');
|
|
64
|
+
if (sort) {
|
|
65
|
+
options.sort = sort;
|
|
66
|
+
}
|
|
67
|
+
// Parse select (JSON)
|
|
68
|
+
const select = searchParams.get('select');
|
|
69
|
+
if (select) {
|
|
70
|
+
try {
|
|
71
|
+
options.select = JSON.parse(select);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Invalid JSON, ignore
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Parse populate (JSON)
|
|
78
|
+
const populate = searchParams.get('populate');
|
|
79
|
+
if (populate) {
|
|
80
|
+
try {
|
|
81
|
+
options.populate = JSON.parse(populate);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Invalid JSON, ignore
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return options;
|
|
88
|
+
}
|
|
89
|
+
function createRevealRequest(request) {
|
|
90
|
+
const url = new URL(request.url);
|
|
91
|
+
return {
|
|
92
|
+
revealui: undefined, // Will be set by the handler
|
|
93
|
+
user: undefined,
|
|
94
|
+
locale: url.searchParams.get('locale') || undefined,
|
|
95
|
+
fallbackLocale: url.searchParams.get('fallbackLocale') || undefined,
|
|
96
|
+
context: {},
|
|
97
|
+
transactionID: undefined,
|
|
98
|
+
url: request.url,
|
|
99
|
+
method: request.method,
|
|
100
|
+
headers: request.headers,
|
|
101
|
+
json: () => request.json(),
|
|
102
|
+
text: () => request.text(),
|
|
103
|
+
formData: () => request.formData(),
|
|
104
|
+
arrayBuffer: () => request.arrayBuffer(),
|
|
105
|
+
blob: () => request.blob(),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Type guard to check if config has cors property
|
|
110
|
+
*/
|
|
111
|
+
function hasCorsProperty(config) {
|
|
112
|
+
return typeof config === 'object' && config !== null && 'cors' in config;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Type guard to check if config has reveal.corsOrigins property (Config from @revealui/config)
|
|
116
|
+
*/
|
|
117
|
+
function hasRevealCorsOrigins(config) {
|
|
118
|
+
return (typeof config === 'object' &&
|
|
119
|
+
config !== null &&
|
|
120
|
+
'reveal' in config &&
|
|
121
|
+
typeof config.reveal === 'object' &&
|
|
122
|
+
config.reveal !== null);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Extract CORS origins from config
|
|
126
|
+
*/
|
|
127
|
+
function getCorsOriginsFromConfig(config) {
|
|
128
|
+
if (!config) {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
// Check for cors property (RevealConfig from schema/core or runtime config)
|
|
132
|
+
if (hasCorsProperty(config)) {
|
|
133
|
+
const corsConfig = config.cors;
|
|
134
|
+
if (typeof corsConfig === 'string') {
|
|
135
|
+
return [corsConfig];
|
|
136
|
+
}
|
|
137
|
+
if (Array.isArray(corsConfig)) {
|
|
138
|
+
return corsConfig;
|
|
139
|
+
}
|
|
140
|
+
if (corsConfig && typeof corsConfig === 'object' && 'origins' in corsConfig) {
|
|
141
|
+
return corsConfig.origins;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Check for reveal.corsOrigins (Config from @revealui/config)
|
|
145
|
+
if (hasRevealCorsOrigins(config)) {
|
|
146
|
+
const corsOrigins = config.reveal?.corsOrigins;
|
|
147
|
+
if (Array.isArray(corsOrigins)) {
|
|
148
|
+
return corsOrigins;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get allowed CORS origin for a request
|
|
155
|
+
* Checks config first, then environment variable, then allows all for development
|
|
156
|
+
*/
|
|
157
|
+
function getAllowedOrigin(request, config) {
|
|
158
|
+
let allowedOrigins = getCorsOriginsFromConfig(config);
|
|
159
|
+
// Fallback to environment variable
|
|
160
|
+
if (allowedOrigins.length === 0 && process.env.REVEALUI_CORS_ORIGINS) {
|
|
161
|
+
allowedOrigins = process.env.REVEALUI_CORS_ORIGINS.split(',').map((s) => s.trim());
|
|
162
|
+
}
|
|
163
|
+
const origin = request.headers.get('origin');
|
|
164
|
+
// If config has specific origins and request origin matches, use it
|
|
165
|
+
if (allowedOrigins.length > 0 && origin && allowedOrigins.includes(origin)) {
|
|
166
|
+
return origin;
|
|
167
|
+
}
|
|
168
|
+
// In development, allow all origins for convenience
|
|
169
|
+
// In production, this should never be reached if CORS is properly configured
|
|
170
|
+
if (process.env.NODE_ENV === 'development') {
|
|
171
|
+
return '*';
|
|
172
|
+
}
|
|
173
|
+
// In production, if no allowed origins configured, deny all (secure default)
|
|
174
|
+
// This prevents accidental exposure in production
|
|
175
|
+
return origin || '';
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get standard CORS headers for a response
|
|
179
|
+
*/
|
|
180
|
+
function getCORSHeaders(request, config) {
|
|
181
|
+
return {
|
|
182
|
+
'Access-Control-Allow-Origin': getAllowedOrigin(request, config),
|
|
183
|
+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
|
|
184
|
+
'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With',
|
|
185
|
+
'Access-Control-Allow-Credentials': 'true',
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Handle CORS preflight requests
|
|
190
|
+
* Note: Next.js middleware (proxy.ts) handles CORS for actual requests
|
|
191
|
+
* This function only handles OPTIONS preflight requests
|
|
192
|
+
*/
|
|
193
|
+
function handleCORS(request, config) {
|
|
194
|
+
if (request.method === 'OPTIONS') {
|
|
195
|
+
return new Response(null, {
|
|
196
|
+
status: 200,
|
|
197
|
+
headers: {
|
|
198
|
+
...getCORSHeaders(request, config),
|
|
199
|
+
'Access-Control-Max-Age': '86400',
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
async function handleCollectionOperation(method, collection, id, revealui, request, options) {
|
|
206
|
+
try {
|
|
207
|
+
let result;
|
|
208
|
+
switch (method) {
|
|
209
|
+
case 'GET':
|
|
210
|
+
if (id) {
|
|
211
|
+
// Find by ID
|
|
212
|
+
result = await revealui.findByID({
|
|
213
|
+
collection,
|
|
214
|
+
id,
|
|
215
|
+
...options,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// Find multiple
|
|
220
|
+
result = await revealui.find({
|
|
221
|
+
collection,
|
|
222
|
+
...options,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
break;
|
|
226
|
+
case 'POST': {
|
|
227
|
+
// Create
|
|
228
|
+
const createData = (await request.json());
|
|
229
|
+
result = await revealui.create({
|
|
230
|
+
collection,
|
|
231
|
+
data: createData,
|
|
232
|
+
...options,
|
|
233
|
+
});
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case 'PATCH': {
|
|
237
|
+
if (!id) {
|
|
238
|
+
return new Response(JSON.stringify({ message: 'ID required for update operation' }), {
|
|
239
|
+
status: 400,
|
|
240
|
+
headers: { 'Content-Type': 'application/json' },
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
// Update
|
|
244
|
+
const updateData = (await request.json());
|
|
245
|
+
result = await revealui.update({
|
|
246
|
+
collection,
|
|
247
|
+
id,
|
|
248
|
+
data: updateData,
|
|
249
|
+
...options,
|
|
250
|
+
});
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
case 'DELETE':
|
|
254
|
+
if (!id) {
|
|
255
|
+
return new Response(JSON.stringify({ message: 'ID required for delete operation' }), {
|
|
256
|
+
status: 400,
|
|
257
|
+
headers: { 'Content-Type': 'application/json' },
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
// Delete
|
|
261
|
+
result = await revealui.delete({
|
|
262
|
+
collection,
|
|
263
|
+
id,
|
|
264
|
+
...options,
|
|
265
|
+
});
|
|
266
|
+
break;
|
|
267
|
+
default:
|
|
268
|
+
return new Response(JSON.stringify({ message: 'Method not allowed' }), {
|
|
269
|
+
status: 405,
|
|
270
|
+
headers: { 'Content-Type': 'application/json' },
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
return new Response(JSON.stringify(result), {
|
|
274
|
+
status: 200,
|
|
275
|
+
headers: {
|
|
276
|
+
'Content-Type': 'application/json',
|
|
277
|
+
...getCORSHeaders(request, revealui.config),
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
const message = error instanceof Error ? error.message : 'Internal server error';
|
|
283
|
+
const status = 'status' in error ? error.status : 500;
|
|
284
|
+
// Log error with context for debugging
|
|
285
|
+
defaultLogger.error('RevealUI Collection API Error:', {
|
|
286
|
+
collection,
|
|
287
|
+
method: request.method,
|
|
288
|
+
error: error instanceof Error
|
|
289
|
+
? {
|
|
290
|
+
message: error.message,
|
|
291
|
+
name: error.name,
|
|
292
|
+
stack: process.env.NODE_ENV === 'development' ? error.stack : undefined,
|
|
293
|
+
}
|
|
294
|
+
: error,
|
|
295
|
+
});
|
|
296
|
+
// Sanitize error message for client (don't expose internal details)
|
|
297
|
+
const clientMessage = status >= 500 ? 'An internal server error occurred' : message;
|
|
298
|
+
return new Response(JSON.stringify({
|
|
299
|
+
message,
|
|
300
|
+
errors: [{ message: clientMessage }],
|
|
301
|
+
}), {
|
|
302
|
+
status,
|
|
303
|
+
headers: {
|
|
304
|
+
'Content-Type': 'application/json',
|
|
305
|
+
...getCORSHeaders(request, revealui.config),
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
async function handleGlobalOperation(method, global, revealui, request, options) {
|
|
311
|
+
try {
|
|
312
|
+
let result;
|
|
313
|
+
switch (method) {
|
|
314
|
+
case 'GET':
|
|
315
|
+
// Find global
|
|
316
|
+
result = (await revealui.globals[global]?.find(options)) ?? null;
|
|
317
|
+
break;
|
|
318
|
+
case 'POST':
|
|
319
|
+
case 'PATCH': {
|
|
320
|
+
// Update global
|
|
321
|
+
const updateData = (await request.json());
|
|
322
|
+
result =
|
|
323
|
+
(await revealui.globals[global]?.update({
|
|
324
|
+
data: updateData,
|
|
325
|
+
...options,
|
|
326
|
+
})) ?? null;
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
default:
|
|
330
|
+
return new Response(JSON.stringify({ message: 'Method not allowed' }), {
|
|
331
|
+
status: 405,
|
|
332
|
+
headers: { 'Content-Type': 'application/json' },
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
return new Response(JSON.stringify(result), {
|
|
336
|
+
status: 200,
|
|
337
|
+
headers: {
|
|
338
|
+
'Content-Type': 'application/json',
|
|
339
|
+
...getCORSHeaders(request, revealui.config),
|
|
340
|
+
},
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
const message = error instanceof Error ? error.message : 'Internal server error';
|
|
345
|
+
const status = 'status' in error ? error.status : 500;
|
|
346
|
+
// Log error with context for debugging
|
|
347
|
+
defaultLogger.error('RevealUI Global API Error:', {
|
|
348
|
+
global,
|
|
349
|
+
method: request.method,
|
|
350
|
+
error: error instanceof Error
|
|
351
|
+
? {
|
|
352
|
+
message: error.message,
|
|
353
|
+
name: error.name,
|
|
354
|
+
stack: process.env.NODE_ENV === 'development' ? error.stack : undefined,
|
|
355
|
+
}
|
|
356
|
+
: error,
|
|
357
|
+
});
|
|
358
|
+
// Sanitize error message for client (don't expose internal details)
|
|
359
|
+
const clientMessage = status >= 500 ? 'An internal server error occurred' : message;
|
|
360
|
+
return new Response(JSON.stringify({
|
|
361
|
+
message,
|
|
362
|
+
errors: [{ message: clientMessage }],
|
|
363
|
+
}), {
|
|
364
|
+
status,
|
|
365
|
+
headers: {
|
|
366
|
+
'Content-Type': 'application/json',
|
|
367
|
+
...getCORSHeaders(request, revealui.config),
|
|
368
|
+
},
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
export async function handleRESTRequest(request, config, revealui) {
|
|
373
|
+
// Handle CORS preflight requests
|
|
374
|
+
// Note: Next.js middleware (proxy.ts) handles CORS for actual requests
|
|
375
|
+
const corsResponse = handleCORS(request, config);
|
|
376
|
+
if (corsResponse) {
|
|
377
|
+
return corsResponse;
|
|
378
|
+
}
|
|
379
|
+
const url = new URL(request.url);
|
|
380
|
+
let pathParts = url.pathname.split('/').filter(Boolean);
|
|
381
|
+
// Skip 'api' prefix if present (Next.js routes include /api in the path)
|
|
382
|
+
if (pathParts[0] === 'api') {
|
|
383
|
+
pathParts = pathParts.slice(1);
|
|
384
|
+
}
|
|
385
|
+
// Parse query parameters
|
|
386
|
+
const options = parseQueryParams(url.searchParams);
|
|
387
|
+
// Create reveal request
|
|
388
|
+
const revealRequest = createRevealRequest(request);
|
|
389
|
+
revealRequest.revealui = revealui;
|
|
390
|
+
try {
|
|
391
|
+
// Route handling
|
|
392
|
+
if (pathParts[0] === 'collections' && pathParts[1]) {
|
|
393
|
+
const collection = pathParts[1];
|
|
394
|
+
const id = pathParts[2]; // Optional ID
|
|
395
|
+
if (!revealui.collections[collection]) {
|
|
396
|
+
return new Response(JSON.stringify({ message: `Collection '${collection}' not found` }), {
|
|
397
|
+
status: 404,
|
|
398
|
+
headers: { 'Content-Type': 'application/json' },
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
return await handleCollectionOperation(request.method, collection, id, revealui, request, options);
|
|
402
|
+
}
|
|
403
|
+
else if (pathParts[0] === 'globals' && pathParts[1]) {
|
|
404
|
+
const global = pathParts[1];
|
|
405
|
+
if (!revealui.globals[global]) {
|
|
406
|
+
return new Response(JSON.stringify({ message: `Global '${global}' not found` }), {
|
|
407
|
+
status: 404,
|
|
408
|
+
headers: { 'Content-Type': 'application/json' },
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
return await handleGlobalOperation(request.method, global, revealui, request, options);
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
return new Response(JSON.stringify({ message: 'Route not found' }), {
|
|
415
|
+
status: 404,
|
|
416
|
+
headers: { 'Content-Type': 'application/json' },
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
catch (error) {
|
|
421
|
+
// Extract error message safely
|
|
422
|
+
const message = error instanceof Error ? error.message : 'Internal server error';
|
|
423
|
+
// Log error with context for debugging
|
|
424
|
+
defaultLogger.error('RevealUI REST API Error:', {
|
|
425
|
+
message,
|
|
426
|
+
path: url.pathname,
|
|
427
|
+
method: request.method,
|
|
428
|
+
error: error instanceof Error
|
|
429
|
+
? {
|
|
430
|
+
message: error.message,
|
|
431
|
+
name: error.name,
|
|
432
|
+
stack: process.env.NODE_ENV === 'development' ? error.stack : undefined,
|
|
433
|
+
}
|
|
434
|
+
: error,
|
|
435
|
+
});
|
|
436
|
+
// Sanitize error message for client (don't expose internal details)
|
|
437
|
+
const clientMessage = 'An internal server error occurred';
|
|
438
|
+
return new Response(JSON.stringify({
|
|
439
|
+
message: clientMessage,
|
|
440
|
+
errors: [{ message: clientMessage }],
|
|
441
|
+
}), {
|
|
442
|
+
status: 500,
|
|
443
|
+
headers: {
|
|
444
|
+
'Content-Type': 'application/json',
|
|
445
|
+
...getCORSHeaders(request, config),
|
|
446
|
+
},
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
// Route handlers for Next.js
|
|
451
|
+
export function createRESTHandlers(config, revealui) {
|
|
452
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
453
|
+
const handler = async (request, _context) => {
|
|
454
|
+
return await handleRESTRequest(request, config, revealui);
|
|
455
|
+
};
|
|
456
|
+
return {
|
|
457
|
+
GET: handler,
|
|
458
|
+
POST: handler,
|
|
459
|
+
PUT: handler,
|
|
460
|
+
DELETE: handler,
|
|
461
|
+
PATCH: handler,
|
|
462
|
+
OPTIONS: handler,
|
|
463
|
+
};
|
|
464
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AccessResult } from '../types/index.js';
|
|
2
|
+
interface UserWithRoles {
|
|
3
|
+
id?: string | number;
|
|
4
|
+
email?: string;
|
|
5
|
+
roles?: string[];
|
|
6
|
+
}
|
|
7
|
+
interface AccessRequest {
|
|
8
|
+
user?: UserWithRoles | null;
|
|
9
|
+
revealui?: unknown;
|
|
10
|
+
}
|
|
11
|
+
type RevealAccessFunction = (args: {
|
|
12
|
+
req: AccessRequest;
|
|
13
|
+
}) => AccessResult | Promise<AccessResult>;
|
|
14
|
+
export declare const anyone: RevealAccessFunction;
|
|
15
|
+
export declare const authenticated: RevealAccessFunction;
|
|
16
|
+
export declare function isAdmin({ req }: {
|
|
17
|
+
req: AccessRequest;
|
|
18
|
+
}): boolean;
|
|
19
|
+
export declare function isSuperAdmin({ req }: {
|
|
20
|
+
req: AccessRequest;
|
|
21
|
+
}): boolean;
|
|
22
|
+
export declare function hasRole(role: string): RevealAccessFunction;
|
|
23
|
+
export declare function hasAnyRole(roles: string[]): RevealAccessFunction;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/auth/access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD,UAAU,aAAa;IACrB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAGD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAGD,KAAK,oBAAoB,GAAG,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,aAAa,CAAA;CAAE,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;AAElG,eAAO,MAAM,MAAM,EAAE,oBAAiC,CAAA;AAEtD,eAAO,MAAM,aAAa,EAAE,oBAE3B,CAAA;AAED,wBAAgB,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,aAAa,CAAA;CAAE,GAAG,OAAO,CAEhE;AAED,wBAAgB,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,aAAa,CAAA;CAAE,GAAG,OAAO,CAErE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAI1D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAIhE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const anyone = () => true;
|
|
2
|
+
export const authenticated = ({ req }) => {
|
|
3
|
+
return !!req.user;
|
|
4
|
+
};
|
|
5
|
+
export function isAdmin({ req }) {
|
|
6
|
+
return !!req.user && !!req.user.roles?.includes('admin');
|
|
7
|
+
}
|
|
8
|
+
export function isSuperAdmin({ req }) {
|
|
9
|
+
return !!req.user && !!req.user.roles?.includes('super-admin');
|
|
10
|
+
}
|
|
11
|
+
export function hasRole(role) {
|
|
12
|
+
return ({ req }) => {
|
|
13
|
+
return !!req.user && !!req.user.roles?.includes(role);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function hasAnyRole(roles) {
|
|
17
|
+
return ({ req }) => {
|
|
18
|
+
return !!req.user && roles.some((role) => req.user?.roles?.includes(role));
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Result Caching with Redis
|
|
3
|
+
*
|
|
4
|
+
* Implements multi-layer caching for database queries
|
|
5
|
+
*/
|
|
6
|
+
interface CacheOptions {
|
|
7
|
+
ttl?: number;
|
|
8
|
+
prefix?: string;
|
|
9
|
+
tags?: string[];
|
|
10
|
+
}
|
|
11
|
+
interface CacheStats {
|
|
12
|
+
hits: number;
|
|
13
|
+
misses: number;
|
|
14
|
+
sets: number;
|
|
15
|
+
deletes: number;
|
|
16
|
+
hitRate: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Cache a query result
|
|
20
|
+
*/
|
|
21
|
+
export declare function cacheQuery<T>(key: string, queryFn: () => Promise<T>, options?: CacheOptions): Promise<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Invalidate cache by key
|
|
24
|
+
*/
|
|
25
|
+
export declare function invalidateCache(key: string): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Invalidate cache by pattern
|
|
28
|
+
*/
|
|
29
|
+
export declare function invalidateCachePattern(pattern: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Invalidate cache by tags
|
|
32
|
+
*/
|
|
33
|
+
export declare function invalidateCacheTags(tags: string[]): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Clear all cache
|
|
36
|
+
*/
|
|
37
|
+
export declare function clearCache(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Get cache statistics
|
|
40
|
+
*/
|
|
41
|
+
export declare function getCacheStats(): CacheStats;
|
|
42
|
+
/**
|
|
43
|
+
* Cache for list queries
|
|
44
|
+
*/
|
|
45
|
+
export declare function cacheList<T>(resource: string, filters: Record<string, unknown>, queryFn: () => Promise<T[]>, ttl?: number): Promise<T[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Cache for single item queries
|
|
48
|
+
*/
|
|
49
|
+
export declare function cacheItem<T>(resource: string, id: string | number, queryFn: () => Promise<T>, ttl?: number): Promise<T>;
|
|
50
|
+
/**
|
|
51
|
+
* Cache for count queries
|
|
52
|
+
*/
|
|
53
|
+
export declare function cacheCount(resource: string, filters: Record<string, unknown>, queryFn: () => Promise<number>, ttl?: number): Promise<number>;
|
|
54
|
+
/**
|
|
55
|
+
* Invalidate resource cache
|
|
56
|
+
*/
|
|
57
|
+
export declare function invalidateResource(resource: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Warm cache with data
|
|
60
|
+
*/
|
|
61
|
+
export declare function warmCache<T>(key: string, data: T, ttl?: number): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Get cached value without executing query
|
|
64
|
+
*/
|
|
65
|
+
export declare function getCached<T>(key: string): Promise<T | null>;
|
|
66
|
+
/**
|
|
67
|
+
* Check if key exists in cache
|
|
68
|
+
*/
|
|
69
|
+
export declare function cacheExists(key: string): Promise<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Memoize function with cache
|
|
72
|
+
*/
|
|
73
|
+
export declare function memoize<T extends (...args: unknown[]) => Promise<unknown>>(fn: T, options?: CacheOptions): T;
|
|
74
|
+
/**
|
|
75
|
+
* Create cache wrapper for query function
|
|
76
|
+
*/
|
|
77
|
+
export declare function withCache<T extends (...args: unknown[]) => Promise<unknown>>(queryFn: T, options: {
|
|
78
|
+
keyFn: (...args: Parameters<T>) => string;
|
|
79
|
+
ttl?: number;
|
|
80
|
+
prefix?: string;
|
|
81
|
+
}): T;
|
|
82
|
+
/**
|
|
83
|
+
* Batch cache operations
|
|
84
|
+
*/
|
|
85
|
+
export declare function batchCache<T>(operations: Array<{
|
|
86
|
+
key: string;
|
|
87
|
+
queryFn: () => Promise<T>;
|
|
88
|
+
ttl?: number;
|
|
89
|
+
}>): Promise<T[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Cache with stale-while-revalidate pattern
|
|
92
|
+
*/
|
|
93
|
+
export declare function cacheSWR<T>(key: string, queryFn: () => Promise<T>, options?: {
|
|
94
|
+
ttl?: number;
|
|
95
|
+
staleTime?: number;
|
|
96
|
+
}): Promise<T>;
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=query-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-cache.d.ts","sourceRoot":"","sources":["../../src/cache/query-cache.ts"],"names":[],"mappings":"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"}
|