@revealui/core 0.0.1-pre.4 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -202
- package/README.md +108 -152
- 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 +316 -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 +411 -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 +385 -0
- package/dist/caching/service-worker.d.ts +154 -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 +23 -0
- package/dist/client/admin/utils/auth.d.ts.map +1 -0
- package/dist/client/admin/utils/auth.js +52 -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 +11 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +13 -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 +34 -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/safe-parse.d.ts +26 -0
- package/dist/database/safe-parse.d.ts.map +1 -0
- package/dist/database/safe-parse.js +42 -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 +176 -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 +214 -0
- package/dist/error-handling/error-reporter.d.ts.map +1 -0
- package/dist/error-handling/error-reporter.js +477 -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 +86 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +92 -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 +16 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +21 -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 +126 -33
- package/dist/instance/RevealUIInstance.d.ts +6 -0
- package/dist/instance/RevealUIInstance.d.ts.map +1 -0
- package/dist/instance/RevealUIInstance.js +306 -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 +41 -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 +27 -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 +34 -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 +45 -0
- package/dist/license.d.ts +82 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +193 -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 +375 -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 +131 -0
- package/dist/optimization/code-splitting.d.ts.map +1 -0
- package/dist/optimization/code-splitting.js +277 -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 +255 -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 +476 -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 +517 -0
- package/dist/security/gdpr.d.ts +300 -0
- package/dist/security/gdpr.d.ts.map +1 -0
- package/dist/security/gdpr.js +465 -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 +12 -0
- package/dist/types/generated.d.ts.map +1 -0
- package/dist/types/generated.js +10 -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 +241 -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
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encryption Utilities
|
|
3
|
+
*
|
|
4
|
+
* Data encryption for at-rest and in-transit protection
|
|
5
|
+
*/
|
|
6
|
+
const DEFAULT_CONFIG = {
|
|
7
|
+
algorithm: 'AES-GCM',
|
|
8
|
+
keySize: 256,
|
|
9
|
+
ivSize: 12,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Encryption system
|
|
13
|
+
*/
|
|
14
|
+
export class EncryptionSystem {
|
|
15
|
+
config;
|
|
16
|
+
keys = new Map();
|
|
17
|
+
constructor(config = {}) {
|
|
18
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate encryption key
|
|
22
|
+
*/
|
|
23
|
+
async generateKey(keyId) {
|
|
24
|
+
const crypto = globalThis.crypto;
|
|
25
|
+
if (!crypto) {
|
|
26
|
+
throw new Error('Crypto API not available');
|
|
27
|
+
}
|
|
28
|
+
const key = await crypto.subtle.generateKey({
|
|
29
|
+
name: this.config.algorithm,
|
|
30
|
+
length: this.config.keySize,
|
|
31
|
+
}, true, // extractable
|
|
32
|
+
['encrypt', 'decrypt']);
|
|
33
|
+
if (keyId) {
|
|
34
|
+
this.keys.set(keyId, key);
|
|
35
|
+
}
|
|
36
|
+
return key;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Import key from raw data
|
|
40
|
+
*/
|
|
41
|
+
async importKey(keyData, keyId) {
|
|
42
|
+
const crypto = globalThis.crypto;
|
|
43
|
+
if (!crypto) {
|
|
44
|
+
throw new Error('Crypto API not available');
|
|
45
|
+
}
|
|
46
|
+
const key = await crypto.subtle.importKey('raw', keyData, {
|
|
47
|
+
name: this.config.algorithm,
|
|
48
|
+
length: this.config.keySize,
|
|
49
|
+
}, true, ['encrypt', 'decrypt']);
|
|
50
|
+
if (keyId) {
|
|
51
|
+
this.keys.set(keyId, key);
|
|
52
|
+
}
|
|
53
|
+
return key;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Export key to raw data
|
|
57
|
+
*/
|
|
58
|
+
async exportKey(key) {
|
|
59
|
+
const crypto = globalThis.crypto;
|
|
60
|
+
if (!crypto) {
|
|
61
|
+
throw new Error('Crypto API not available');
|
|
62
|
+
}
|
|
63
|
+
return crypto.subtle.exportKey('raw', key);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Encrypt data
|
|
67
|
+
*/
|
|
68
|
+
async encrypt(data, keyOrId) {
|
|
69
|
+
const crypto = globalThis.crypto;
|
|
70
|
+
if (!crypto) {
|
|
71
|
+
throw new Error('Crypto API not available');
|
|
72
|
+
}
|
|
73
|
+
// Get key
|
|
74
|
+
const key = typeof keyOrId === 'string' ? this.keys.get(keyOrId) : keyOrId;
|
|
75
|
+
if (!key) {
|
|
76
|
+
throw new Error('Key not found');
|
|
77
|
+
}
|
|
78
|
+
// Generate IV
|
|
79
|
+
const iv = crypto.getRandomValues(new Uint8Array(this.config.ivSize || 12));
|
|
80
|
+
// Encode data
|
|
81
|
+
const encoder = new TextEncoder();
|
|
82
|
+
const encodedData = encoder.encode(data);
|
|
83
|
+
// Encrypt
|
|
84
|
+
const encrypted = await crypto.subtle.encrypt({
|
|
85
|
+
name: this.config.algorithm,
|
|
86
|
+
iv,
|
|
87
|
+
}, key, encodedData);
|
|
88
|
+
// Convert to base64
|
|
89
|
+
const encryptedArray = new Uint8Array(encrypted);
|
|
90
|
+
const ivArray = new Uint8Array(iv);
|
|
91
|
+
return {
|
|
92
|
+
data: this.arrayBufferToBase64(encryptedArray),
|
|
93
|
+
iv: this.arrayBufferToBase64(ivArray),
|
|
94
|
+
algorithm: this.config.algorithm,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Decrypt data
|
|
99
|
+
*/
|
|
100
|
+
async decrypt(encryptedData, keyOrId) {
|
|
101
|
+
const crypto = globalThis.crypto;
|
|
102
|
+
if (!crypto) {
|
|
103
|
+
throw new Error('Crypto API not available');
|
|
104
|
+
}
|
|
105
|
+
// Get key
|
|
106
|
+
const key = typeof keyOrId === 'string' ? this.keys.get(keyOrId) : keyOrId;
|
|
107
|
+
if (!key) {
|
|
108
|
+
throw new Error('Key not found');
|
|
109
|
+
}
|
|
110
|
+
// Decode data
|
|
111
|
+
const data = this.base64ToArrayBuffer(encryptedData.data);
|
|
112
|
+
const iv = this.base64ToArrayBuffer(encryptedData.iv);
|
|
113
|
+
// Decrypt
|
|
114
|
+
const decrypted = await crypto.subtle.decrypt({
|
|
115
|
+
name: encryptedData.algorithm,
|
|
116
|
+
iv: iv,
|
|
117
|
+
}, key, data);
|
|
118
|
+
// Decode text
|
|
119
|
+
const decoder = new TextDecoder();
|
|
120
|
+
return decoder.decode(decrypted);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Encrypt object
|
|
124
|
+
*/
|
|
125
|
+
async encryptObject(obj, keyOrId) {
|
|
126
|
+
const json = JSON.stringify(obj);
|
|
127
|
+
return this.encrypt(json, keyOrId);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Decrypt object
|
|
131
|
+
*/
|
|
132
|
+
async decryptObject(encryptedData, keyOrId) {
|
|
133
|
+
const json = await this.decrypt(encryptedData, keyOrId);
|
|
134
|
+
return JSON.parse(json);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Hash data
|
|
138
|
+
*/
|
|
139
|
+
async hash(data, algorithm = 'SHA-256') {
|
|
140
|
+
const crypto = globalThis.crypto;
|
|
141
|
+
if (!crypto) {
|
|
142
|
+
throw new Error('Crypto API not available');
|
|
143
|
+
}
|
|
144
|
+
const encoder = new TextEncoder();
|
|
145
|
+
const encodedData = encoder.encode(data);
|
|
146
|
+
const hashBuffer = await crypto.subtle.digest(algorithm, encodedData);
|
|
147
|
+
return this.arrayBufferToBase64(new Uint8Array(hashBuffer));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Generate random bytes
|
|
151
|
+
*/
|
|
152
|
+
randomBytes(length) {
|
|
153
|
+
const crypto = globalThis.crypto;
|
|
154
|
+
if (!crypto) {
|
|
155
|
+
throw new Error('Crypto API not available');
|
|
156
|
+
}
|
|
157
|
+
return crypto.getRandomValues(new Uint8Array(length));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Generate random string
|
|
161
|
+
*/
|
|
162
|
+
randomString(length, charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
|
|
163
|
+
// Rejection sampling to avoid modulo bias:
|
|
164
|
+
// Only accept bytes below the largest multiple of charset.length that fits in a byte.
|
|
165
|
+
const maxValid = 256 - (256 % charset.length);
|
|
166
|
+
const result = [];
|
|
167
|
+
while (result.length < length) {
|
|
168
|
+
const bytes = this.randomBytes(length - result.length + 16);
|
|
169
|
+
for (const byte of bytes) {
|
|
170
|
+
if (byte < maxValid) {
|
|
171
|
+
result.push(charset[byte % charset.length]);
|
|
172
|
+
if (result.length === length)
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return result.join('');
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Convert ArrayBuffer to base64
|
|
181
|
+
*/
|
|
182
|
+
arrayBufferToBase64(buffer) {
|
|
183
|
+
const bytes = Array.from(buffer);
|
|
184
|
+
const binary = bytes.map((byte) => String.fromCharCode(byte)).join('');
|
|
185
|
+
if (typeof btoa !== 'undefined') {
|
|
186
|
+
return btoa(binary);
|
|
187
|
+
}
|
|
188
|
+
if (typeof Buffer !== 'undefined') {
|
|
189
|
+
return Buffer.from(binary, 'binary').toString('base64');
|
|
190
|
+
}
|
|
191
|
+
throw new Error('No base64 encoding available');
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Convert base64 to ArrayBuffer
|
|
195
|
+
*/
|
|
196
|
+
base64ToArrayBuffer(base64) {
|
|
197
|
+
let binary;
|
|
198
|
+
if (typeof atob !== 'undefined') {
|
|
199
|
+
binary = atob(base64);
|
|
200
|
+
}
|
|
201
|
+
else if (typeof Buffer !== 'undefined') {
|
|
202
|
+
binary = Buffer.from(base64, 'base64').toString('binary');
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
throw new Error('No base64 decoding available');
|
|
206
|
+
}
|
|
207
|
+
const bytes = new Uint8Array(binary.length);
|
|
208
|
+
for (let i = 0; i < binary.length; i++) {
|
|
209
|
+
bytes[i] = binary.charCodeAt(i);
|
|
210
|
+
}
|
|
211
|
+
return bytes;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Store key
|
|
215
|
+
*/
|
|
216
|
+
storeKey(keyId, key) {
|
|
217
|
+
this.keys.set(keyId, key);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get key
|
|
221
|
+
*/
|
|
222
|
+
getKey(keyId) {
|
|
223
|
+
return this.keys.get(keyId);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Remove key
|
|
227
|
+
*/
|
|
228
|
+
removeKey(keyId) {
|
|
229
|
+
this.keys.delete(keyId);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Clear all keys
|
|
233
|
+
*/
|
|
234
|
+
clearKeys() {
|
|
235
|
+
this.keys.clear();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Global encryption instance
|
|
240
|
+
*/
|
|
241
|
+
export const encryption = new EncryptionSystem();
|
|
242
|
+
/**
|
|
243
|
+
* Field-level encryption
|
|
244
|
+
*/
|
|
245
|
+
export class FieldEncryption {
|
|
246
|
+
encryption;
|
|
247
|
+
key = null;
|
|
248
|
+
constructor(encryption) {
|
|
249
|
+
this.encryption = encryption;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Initialize with key
|
|
253
|
+
*/
|
|
254
|
+
async initialize(key) {
|
|
255
|
+
this.key = key;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Encrypt field
|
|
259
|
+
*/
|
|
260
|
+
async encryptField(value) {
|
|
261
|
+
if (!this.key) {
|
|
262
|
+
throw new Error('Encryption not initialized');
|
|
263
|
+
}
|
|
264
|
+
const stringValue = typeof value === 'string' ? value : JSON.stringify(value);
|
|
265
|
+
return this.encryption.encrypt(stringValue, this.key);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Decrypt field
|
|
269
|
+
*/
|
|
270
|
+
async decryptField(encryptedData) {
|
|
271
|
+
if (!this.key) {
|
|
272
|
+
throw new Error('Encryption not initialized');
|
|
273
|
+
}
|
|
274
|
+
const decrypted = await this.encryption.decrypt(encryptedData, this.key);
|
|
275
|
+
// Try to parse as JSON
|
|
276
|
+
try {
|
|
277
|
+
return JSON.parse(decrypted);
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return decrypted;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Encrypt object fields
|
|
285
|
+
*/
|
|
286
|
+
async encryptFields(obj, fields) {
|
|
287
|
+
const result = { ...obj };
|
|
288
|
+
for (const field of fields) {
|
|
289
|
+
if (field in result) {
|
|
290
|
+
result[field] = (await this.encryptField(result[field]));
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return result;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Decrypt object fields
|
|
297
|
+
*/
|
|
298
|
+
async decryptFields(obj, fields) {
|
|
299
|
+
const result = { ...obj };
|
|
300
|
+
for (const field of fields) {
|
|
301
|
+
if (field in result && typeof result[field] === 'object' && result[field] !== null) {
|
|
302
|
+
const encryptedData = result[field];
|
|
303
|
+
if ('data' in encryptedData && 'iv' in encryptedData) {
|
|
304
|
+
result[field] = (await this.decryptField(encryptedData));
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return result;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Key rotation
|
|
313
|
+
*/
|
|
314
|
+
export class KeyRotationManager {
|
|
315
|
+
encryption;
|
|
316
|
+
currentKeyId;
|
|
317
|
+
oldKeys = new Map();
|
|
318
|
+
constructor(encryption, initialKeyId) {
|
|
319
|
+
this.encryption = encryption;
|
|
320
|
+
this.currentKeyId = initialKeyId;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Rotate to new key
|
|
324
|
+
*/
|
|
325
|
+
async rotate(newKeyId, newKey) {
|
|
326
|
+
// Store old key
|
|
327
|
+
const oldKey = this.encryption.getKey(this.currentKeyId);
|
|
328
|
+
if (oldKey) {
|
|
329
|
+
this.oldKeys.set(this.currentKeyId, oldKey);
|
|
330
|
+
}
|
|
331
|
+
// Set new key
|
|
332
|
+
this.encryption.storeKey(newKeyId, newKey);
|
|
333
|
+
this.currentKeyId = newKeyId;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Re-encrypt data with new key
|
|
337
|
+
*/
|
|
338
|
+
async reencrypt(encryptedData, oldKeyId) {
|
|
339
|
+
// Get keys
|
|
340
|
+
const oldKey = this.oldKeys.get(oldKeyId) || this.encryption.getKey(oldKeyId);
|
|
341
|
+
const newKey = this.encryption.getKey(this.currentKeyId);
|
|
342
|
+
if (!(oldKey && newKey)) {
|
|
343
|
+
throw new Error('Keys not found');
|
|
344
|
+
}
|
|
345
|
+
// Decrypt with old key
|
|
346
|
+
const decrypted = await this.encryption.decrypt(encryptedData, oldKey);
|
|
347
|
+
// Encrypt with new key
|
|
348
|
+
return this.encryption.encrypt(decrypted, newKey);
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Get current key ID
|
|
352
|
+
*/
|
|
353
|
+
getCurrentKeyId() {
|
|
354
|
+
return this.currentKeyId;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Clean up old keys
|
|
358
|
+
*/
|
|
359
|
+
cleanupOldKeys(_olderThan) {
|
|
360
|
+
// In a real implementation, you'd track key creation dates
|
|
361
|
+
// and remove keys older than the specified date
|
|
362
|
+
this.oldKeys.clear();
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Envelope encryption for large data
|
|
367
|
+
*/
|
|
368
|
+
export class EnvelopeEncryption {
|
|
369
|
+
encryption;
|
|
370
|
+
masterKey;
|
|
371
|
+
constructor(encryption, masterKey) {
|
|
372
|
+
this.encryption = encryption;
|
|
373
|
+
this.masterKey = masterKey;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Encrypt with envelope encryption
|
|
377
|
+
*/
|
|
378
|
+
async encrypt(data) {
|
|
379
|
+
// Generate data encryption key (DEK)
|
|
380
|
+
const dek = await this.encryption.generateKey();
|
|
381
|
+
// Encrypt data with DEK
|
|
382
|
+
const encryptedData = await this.encryption.encrypt(data, dek);
|
|
383
|
+
// Export DEK
|
|
384
|
+
const dekRaw = await this.encryption.exportKey(dek);
|
|
385
|
+
const dekBase64 = this.arrayBufferToBase64(new Uint8Array(dekRaw));
|
|
386
|
+
// Encrypt DEK with master key
|
|
387
|
+
const encryptedKey = await this.encryption.encrypt(dekBase64, this.masterKey);
|
|
388
|
+
return { encryptedData, encryptedKey };
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Decrypt with envelope encryption
|
|
392
|
+
*/
|
|
393
|
+
async decrypt(encryptedData, encryptedKey) {
|
|
394
|
+
// Decrypt DEK with master key
|
|
395
|
+
const dekBase64 = await this.encryption.decrypt(encryptedKey, this.masterKey);
|
|
396
|
+
const dekRaw = this.base64ToArrayBuffer(dekBase64);
|
|
397
|
+
// Import DEK
|
|
398
|
+
const dek = await this.encryption.importKey(dekRaw.buffer);
|
|
399
|
+
// Decrypt data with DEK
|
|
400
|
+
return this.encryption.decrypt(encryptedData, dek);
|
|
401
|
+
}
|
|
402
|
+
arrayBufferToBase64(buffer) {
|
|
403
|
+
const bytes = Array.from(buffer);
|
|
404
|
+
const binary = bytes.map((byte) => String.fromCharCode(byte)).join('');
|
|
405
|
+
return typeof btoa !== 'undefined'
|
|
406
|
+
? btoa(binary)
|
|
407
|
+
: Buffer.from(binary, 'binary').toString('base64');
|
|
408
|
+
}
|
|
409
|
+
base64ToArrayBuffer(base64) {
|
|
410
|
+
const binary = typeof atob !== 'undefined' ? atob(base64) : Buffer.from(base64, 'base64').toString('binary');
|
|
411
|
+
const bytes = new Uint8Array(binary.length);
|
|
412
|
+
for (let i = 0; i < binary.length; i++) {
|
|
413
|
+
bytes[i] = binary.charCodeAt(i);
|
|
414
|
+
}
|
|
415
|
+
return bytes;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Data masking utilities
|
|
420
|
+
*/
|
|
421
|
+
export class DataMasking {
|
|
422
|
+
/**
|
|
423
|
+
* Mask email
|
|
424
|
+
*/
|
|
425
|
+
static maskEmail(email) {
|
|
426
|
+
const [local, domain] = email.split('@');
|
|
427
|
+
if (!(local && domain))
|
|
428
|
+
return email;
|
|
429
|
+
const maskedLocal = local.length > 2
|
|
430
|
+
? local[0] + '*'.repeat(local.length - 2) + local[local.length - 1]
|
|
431
|
+
: `${local[0]}*`;
|
|
432
|
+
return `${maskedLocal}@${domain}`;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Mask phone number
|
|
436
|
+
*/
|
|
437
|
+
static maskPhone(phone) {
|
|
438
|
+
const digits = phone.replace(/\D/g, '');
|
|
439
|
+
if (digits.length < 4)
|
|
440
|
+
return phone;
|
|
441
|
+
const lastFour = digits.slice(-4);
|
|
442
|
+
const masked = '*'.repeat(digits.length - 4) + lastFour;
|
|
443
|
+
return phone.replace(/\d/g, (char, index) => {
|
|
444
|
+
const digitIndex = phone.slice(0, index + 1).replace(/\D/g, '').length - 1;
|
|
445
|
+
return masked[digitIndex] || char;
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Mask credit card
|
|
450
|
+
*/
|
|
451
|
+
static maskCreditCard(card) {
|
|
452
|
+
const digits = card.replace(/\D/g, '');
|
|
453
|
+
if (digits.length < 4)
|
|
454
|
+
return card;
|
|
455
|
+
const lastFour = digits.slice(-4);
|
|
456
|
+
return `****-****-****-${lastFour}`;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Mask SSN
|
|
460
|
+
*/
|
|
461
|
+
static maskSSN(ssn) {
|
|
462
|
+
const digits = ssn.replace(/\D/g, '');
|
|
463
|
+
if (digits.length !== 9)
|
|
464
|
+
return ssn;
|
|
465
|
+
return `***-**-${digits.slice(-4)}`;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Mask string (keep first and last character)
|
|
469
|
+
*/
|
|
470
|
+
static maskString(str, keepChars = 1) {
|
|
471
|
+
if (str.length <= keepChars * 2) {
|
|
472
|
+
return '*'.repeat(str.length);
|
|
473
|
+
}
|
|
474
|
+
const prefix = str.slice(0, keepChars);
|
|
475
|
+
const suffix = str.slice(-keepChars);
|
|
476
|
+
const masked = '*'.repeat(str.length - keepChars * 2);
|
|
477
|
+
return `${prefix}${masked}${suffix}`;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Secure random token generator
|
|
482
|
+
*/
|
|
483
|
+
export class TokenGenerator {
|
|
484
|
+
/**
|
|
485
|
+
* Generate secure token. `length` is the number of random bytes;
|
|
486
|
+
* the returned string is hex-encoded, so it will be `length * 2` characters.
|
|
487
|
+
*/
|
|
488
|
+
static generate(length = 32) {
|
|
489
|
+
const bytes = encryption.randomBytes(length);
|
|
490
|
+
return Array.from(bytes)
|
|
491
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
492
|
+
.join('');
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Generate UUID v4
|
|
496
|
+
*/
|
|
497
|
+
static generateUUID() {
|
|
498
|
+
const crypto = globalThis.crypto;
|
|
499
|
+
if (!crypto) {
|
|
500
|
+
throw new Error('Crypto API not available');
|
|
501
|
+
}
|
|
502
|
+
return crypto.randomUUID();
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Generate API key
|
|
506
|
+
*/
|
|
507
|
+
static generateAPIKey(prefix = 'sk') {
|
|
508
|
+
const token = TokenGenerator.generate(32);
|
|
509
|
+
return `${prefix}_${token}`;
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Generate session ID
|
|
513
|
+
*/
|
|
514
|
+
static generateSessionID() {
|
|
515
|
+
return TokenGenerator.generate(64);
|
|
516
|
+
}
|
|
517
|
+
}
|