@nextsparkjs/core 0.1.0-beta.92 → 0.1.0-beta.94
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/dist/components/dashboard/block-editor/array-field.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/array-field.js +55 -3
- package/dist/components/dashboard/block-editor/dynamic-form.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/dynamic-form.js +82 -2
- package/dist/components/dashboard/navigation/DynamicNavigation.d.ts.map +1 -1
- package/dist/components/dashboard/navigation/DynamicNavigation.js +7 -1
- package/dist/components/devtools/scheduled-actions/actions-table.d.ts +1 -0
- package/dist/components/devtools/scheduled-actions/actions-table.d.ts.map +1 -1
- package/dist/components/devtools/scheduled-actions/actions-table.js +182 -46
- package/dist/components/devtools/scheduled-actions/types.d.ts +1 -0
- package/dist/components/devtools/scheduled-actions/types.d.ts.map +1 -1
- package/dist/components/media/MediaCard.d.ts +23 -0
- package/dist/components/media/MediaCard.d.ts.map +1 -0
- package/dist/components/media/MediaCard.js +154 -0
- package/dist/components/media/MediaDetailPanel.d.ts +17 -0
- package/dist/components/media/MediaDetailPanel.d.ts.map +1 -0
- package/dist/components/media/MediaDetailPanel.js +331 -0
- package/dist/components/media/MediaGrid.d.ts +26 -0
- package/dist/components/media/MediaGrid.d.ts.map +1 -0
- package/dist/components/media/MediaGrid.js +77 -0
- package/dist/components/media/MediaLibrary.d.ts +20 -0
- package/dist/components/media/MediaLibrary.d.ts.map +1 -0
- package/dist/components/media/MediaLibrary.js +229 -0
- package/dist/components/media/MediaList.d.ts +24 -0
- package/dist/components/media/MediaList.d.ts.map +1 -0
- package/dist/components/media/MediaList.js +181 -0
- package/dist/components/media/MediaSelector.d.ts +19 -0
- package/dist/components/media/MediaSelector.d.ts.map +1 -0
- package/dist/components/media/MediaSelector.js +145 -0
- package/dist/components/media/MediaTagFilter.d.ts +16 -0
- package/dist/components/media/MediaTagFilter.d.ts.map +1 -0
- package/dist/components/media/MediaTagFilter.js +122 -0
- package/dist/components/media/MediaToolbar.d.ts +25 -0
- package/dist/components/media/MediaToolbar.d.ts.map +1 -0
- package/dist/components/media/MediaToolbar.js +136 -0
- package/dist/components/media/MediaUploadZone.d.ts +19 -0
- package/dist/components/media/MediaUploadZone.d.ts.map +1 -0
- package/dist/components/media/MediaUploadZone.js +248 -0
- package/dist/components/media/index.d.ts +15 -0
- package/dist/components/media/index.d.ts.map +1 -0
- package/dist/components/media/index.js +20 -0
- package/dist/contexts/TeamContext.js +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useEnsureUserMetadata.d.ts +4 -0
- package/dist/hooks/useEnsureUserMetadata.d.ts.map +1 -1
- package/dist/hooks/useEnsureUserMetadata.js +85 -60
- package/dist/hooks/useEntityMutations.d.ts.map +1 -1
- package/dist/hooks/useEntityMutations.js +5 -9
- package/dist/hooks/useMedia.d.ts +56 -0
- package/dist/hooks/useMedia.d.ts.map +1 -0
- package/dist/hooks/useMedia.js +181 -0
- package/dist/hooks/useMediaUpload.d.ts +27 -0
- package/dist/hooks/useMediaUpload.d.ts.map +1 -0
- package/dist/hooks/useMediaUpload.js +36 -0
- package/dist/hooks/useUserSettings.d.ts +5 -4
- package/dist/hooks/useUserSettings.d.ts.map +1 -1
- package/dist/hooks/useUserSettings.js +42 -40
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/lib/api/auth/dual-auth.d.ts +6 -2
- package/dist/lib/api/auth/dual-auth.d.ts.map +1 -1
- package/dist/lib/api/auth/dual-auth.js +5 -9
- package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
- package/dist/lib/api/entity/generic-handler.js +3 -3
- package/dist/lib/config/app.config.d.ts.map +1 -1
- package/dist/lib/config/app.config.js +37 -0
- package/dist/lib/config/config-sync.d.ts +1 -0
- package/dist/lib/config/config-sync.d.ts.map +1 -1
- package/dist/lib/config/config-sync.js +2 -0
- package/dist/lib/config/types.d.ts +29 -0
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/media/schemas.d.ts +39 -0
- package/dist/lib/media/schemas.d.ts.map +1 -0
- package/dist/lib/media/schemas.js +32 -0
- package/dist/lib/media/types.d.ts +69 -0
- package/dist/lib/media/types.d.ts.map +1 -0
- package/dist/lib/media/types.js +0 -0
- package/dist/lib/media/utils.d.ts +26 -0
- package/dist/lib/media/utils.d.ts.map +1 -0
- package/dist/lib/media/utils.js +33 -0
- package/dist/lib/rate-limit-redis.d.ts.map +1 -1
- package/dist/lib/rate-limit-redis.js +13 -4
- package/dist/lib/scheduled-actions/initializer.d.ts +6 -3
- package/dist/lib/scheduled-actions/initializer.d.ts.map +1 -1
- package/dist/lib/scheduled-actions/initializer.js +11 -6
- package/dist/lib/scheduled-actions/processor.d.ts +20 -4
- package/dist/lib/scheduled-actions/processor.d.ts.map +1 -1
- package/dist/lib/scheduled-actions/processor.js +128 -34
- package/dist/lib/scheduled-actions/registry.d.ts +3 -0
- package/dist/lib/scheduled-actions/registry.d.ts.map +1 -1
- package/dist/lib/scheduled-actions/registry.js +2 -1
- package/dist/lib/scheduled-actions/scheduler.d.ts +1 -1
- package/dist/lib/scheduled-actions/scheduler.d.ts.map +1 -1
- package/dist/lib/scheduled-actions/scheduler.js +76 -38
- package/dist/lib/scheduled-actions/types.d.ts +73 -0
- package/dist/lib/scheduled-actions/types.d.ts.map +1 -1
- package/dist/lib/selectors/core-selectors.d.ts +102 -0
- package/dist/lib/selectors/core-selectors.d.ts.map +1 -1
- package/dist/lib/selectors/core-selectors.js +3 -1
- package/dist/lib/selectors/domains/block-editor.selectors.d.ts +8 -0
- package/dist/lib/selectors/domains/block-editor.selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/block-editor.selectors.js +9 -0
- package/dist/lib/selectors/domains/devtools.selectors.d.ts +6 -0
- package/dist/lib/selectors/domains/devtools.selectors.d.ts.map +1 -1
- package/dist/lib/selectors/domains/devtools.selectors.js +6 -0
- package/dist/lib/selectors/domains/index.d.ts +1 -0
- package/dist/lib/selectors/domains/index.d.ts.map +1 -1
- package/dist/lib/selectors/domains/index.js +2 -0
- package/dist/lib/selectors/domains/media.selectors.d.ts +96 -0
- package/dist/lib/selectors/domains/media.selectors.d.ts.map +1 -0
- package/dist/lib/selectors/domains/media.selectors.js +103 -0
- package/dist/lib/selectors/selectors.d.ts +204 -0
- package/dist/lib/selectors/selectors.d.ts.map +1 -1
- package/dist/lib/services/index.d.ts +2 -0
- package/dist/lib/services/index.d.ts.map +1 -1
- package/dist/lib/services/index.js +2 -0
- package/dist/lib/services/media.service.d.ts +158 -0
- package/dist/lib/services/media.service.d.ts.map +1 -0
- package/dist/lib/services/media.service.js +410 -0
- package/dist/messages/de/devtools.json +16 -0
- package/dist/messages/de/index.d.ts +16 -0
- package/dist/messages/de/index.d.ts.map +1 -1
- package/dist/messages/en/admin.json +4 -1
- package/dist/messages/en/devtools.json +16 -0
- package/dist/messages/en/index.d.ts +167 -0
- package/dist/messages/en/index.d.ts.map +1 -1
- package/dist/messages/en/index.js +2 -0
- package/dist/messages/en/index.ts +2 -0
- package/dist/messages/en/media.json +147 -0
- package/dist/messages/en/navigation.json +1 -0
- package/dist/messages/es/admin.json +4 -1
- package/dist/messages/es/devtools.json +16 -0
- package/dist/messages/es/index.d.ts +167 -0
- package/dist/messages/es/index.d.ts.map +1 -1
- package/dist/messages/es/index.js +2 -0
- package/dist/messages/es/index.ts +2 -0
- package/dist/messages/es/media.json +147 -0
- package/dist/messages/es/navigation.json +1 -0
- package/dist/messages/fr/devtools.json +16 -0
- package/dist/messages/fr/index.d.ts +16 -0
- package/dist/messages/fr/index.d.ts.map +1 -1
- package/dist/messages/it/devtools.json +16 -0
- package/dist/messages/it/index.d.ts +16 -0
- package/dist/messages/it/index.d.ts.map +1 -1
- package/dist/messages/pt/devtools.json +16 -0
- package/dist/messages/pt/index.d.ts +16 -0
- package/dist/messages/pt/index.d.ts.map +1 -1
- package/dist/migrations/017_scheduled_actions_table.sql +21 -0
- package/dist/migrations/021_media.sql +154 -0
- package/dist/migrations/090_sample_data.sql +53 -0
- package/dist/styles/classes.json +36 -3
- package/dist/styles/ui.css +1 -1
- package/dist/templates/app/api/devtools/config/entities/route.ts +18 -11
- package/dist/templates/app/api/devtools/config/theme/route.ts +5 -4
- package/dist/templates/app/api/devtools/tests/[...path]/route.ts +6 -5
- package/dist/templates/app/api/devtools/tests/route.ts +5 -4
- package/dist/templates/app/api/health/route.ts +6 -4
- package/dist/templates/app/api/internal/user-metadata/route.ts +3 -2
- package/dist/templates/app/api/superadmin/subscriptions/route.ts +5 -6
- package/dist/templates/app/api/superadmin/teams/[teamId]/route.ts +6 -7
- package/dist/templates/app/api/superadmin/teams/route.ts +5 -6
- package/dist/templates/app/api/superadmin/users/[userId]/route.ts +11 -16
- package/dist/templates/app/api/superadmin/users/route.ts +9 -10
- package/dist/templates/app/api/user/delete-account/route.ts +3 -2
- package/dist/templates/app/api/user/plan-flags/route.ts +11 -24
- package/dist/templates/app/api/user/profile/route.ts +7 -6
- package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +16 -18
- package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/route.ts +17 -19
- package/dist/templates/app/api/v1/[entity]/[id]/route.ts +10 -12
- package/dist/templates/app/api/v1/[entity]/route.ts +9 -11
- package/dist/templates/app/api/v1/api-keys/[id]/route.ts +9 -8
- package/dist/templates/app/api/v1/api-keys/route.ts +7 -6
- package/dist/templates/app/api/v1/auth/signup-with-invite/route.ts +3 -2
- package/dist/templates/app/api/v1/billing/cancel/route.ts +15 -14
- package/dist/templates/app/api/v1/billing/change-plan/route.ts +10 -9
- package/dist/templates/app/api/v1/billing/check-action/route.ts +8 -7
- package/dist/templates/app/api/v1/billing/checkout/route.ts +10 -9
- package/dist/templates/app/api/v1/billing/plans/route.ts +5 -4
- package/dist/templates/app/api/v1/billing/portal/route.ts +9 -8
- package/dist/templates/app/api/v1/blocks/[slug]/route.ts +4 -3
- package/dist/templates/app/api/v1/blocks/route.ts +3 -2
- package/dist/templates/app/api/v1/blocks/validate/route.ts +5 -3
- package/dist/templates/app/api/v1/cron/process/route.ts +4 -6
- package/dist/templates/app/api/v1/devtools/blocks/route.ts +3 -2
- package/dist/templates/app/api/v1/devtools/docs/route.ts +3 -2
- package/dist/templates/app/api/v1/devtools/features/route.ts +3 -2
- package/dist/templates/app/api/v1/devtools/flows/route.ts +3 -2
- package/dist/templates/app/api/v1/devtools/scheduled-actions/route.ts +125 -3
- package/dist/templates/app/api/v1/devtools/scheduled-actions/run/route.ts +110 -0
- package/dist/templates/app/api/v1/devtools/testing/route.ts +3 -2
- package/dist/templates/app/api/v1/media/[id]/route.ts +144 -0
- package/dist/templates/app/api/v1/media/[id]/tags/route.ts +154 -0
- package/dist/templates/app/api/v1/media/check-duplicates/route.ts +56 -0
- package/dist/templates/app/api/v1/media/route.ts +56 -0
- package/dist/templates/app/api/v1/media/upload/route.ts +157 -33
- package/dist/templates/app/api/v1/media-tags/route.ts +65 -0
- package/dist/templates/app/api/v1/plugin/[...path]/route.ts +16 -15
- package/dist/templates/app/api/v1/plugin/route.ts +3 -2
- package/dist/templates/app/api/v1/post-categories/[id]/route.ts +10 -9
- package/dist/templates/app/api/v1/post-categories/route.ts +5 -4
- package/dist/templates/app/api/v1/team-invitations/[token]/accept/route.ts +3 -3
- package/dist/templates/app/api/v1/team-invitations/[token]/decline/route.ts +3 -3
- package/dist/templates/app/api/v1/team-invitations/[token]/route.ts +3 -2
- package/dist/templates/app/api/v1/team-invitations/route.ts +3 -2
- package/dist/templates/app/api/v1/teams/[teamId]/invitations/route.ts +5 -4
- package/dist/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +3 -2
- package/dist/templates/app/api/v1/teams/[teamId]/invoices/route.ts +3 -2
- package/dist/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +5 -4
- package/dist/templates/app/api/v1/teams/[teamId]/members/route.ts +5 -5
- package/dist/templates/app/api/v1/teams/[teamId]/route.ts +31 -58
- package/dist/templates/app/api/v1/teams/[teamId]/subscription/route.ts +3 -2
- package/dist/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +5 -4
- package/dist/templates/app/api/v1/teams/route.ts +18 -17
- package/dist/templates/app/api/v1/teams/switch/route.ts +3 -2
- package/dist/templates/app/api/v1/theme/[...path]/route.ts +16 -15
- package/dist/templates/app/api/v1/theme/route.ts +3 -2
- package/dist/templates/app/api/v1/users/[id]/meta/[key]/route.ts +7 -6
- package/dist/templates/app/api/v1/users/[id]/route.ts +9 -8
- package/dist/templates/app/api/v1/users/route.ts +7 -6
- package/dist/templates/app/dashboard/(main)/media/page.tsx +607 -0
- package/dist/templates/contents/themes/starter/messages/de/dev.json +106 -0
- package/dist/templates/contents/themes/starter/messages/de/index.ts +2 -0
- package/dist/templates/contents/themes/starter/messages/en/dev.json +106 -0
- package/dist/templates/contents/themes/starter/messages/en/index.ts +2 -0
- package/dist/templates/contents/themes/starter/messages/es/dev.json +106 -0
- package/dist/templates/contents/themes/starter/messages/es/index.ts +2 -0
- package/dist/templates/contents/themes/starter/messages/fr/dev.json +106 -0
- package/dist/templates/contents/themes/starter/messages/fr/index.ts +2 -0
- package/dist/templates/contents/themes/starter/messages/it/dev.json +106 -0
- package/dist/templates/contents/themes/starter/messages/it/index.ts +2 -0
- package/dist/templates/contents/themes/starter/messages/pt/dev.json +106 -0
- package/dist/templates/contents/themes/starter/messages/pt/index.ts +2 -0
- package/dist/templates/contents/themes/starter/styles/globals.css +14 -0
- package/dist/templates/instrumentation.ts +33 -0
- package/dist/types/blocks.d.ts +1 -1
- package/dist/types/blocks.d.ts.map +1 -1
- package/migrations/017_scheduled_actions_table.sql +21 -0
- package/migrations/021_media.sql +154 -0
- package/migrations/090_sample_data.sql +53 -0
- package/package.json +3 -2
- package/scripts/build/registry/config.mjs +41 -0
- package/scripts/build/registry/discovery/templates.mjs +0 -1
- package/scripts/build/registry/generators/entity-registry.mjs +16 -6
- package/scripts/build/registry/generators/route-handlers.mjs +8 -2
- package/scripts/build/registry/generators/template-registry.mjs +16 -4
- package/scripts/build/registry/post-build/route-cleanup.mjs +0 -1
- package/scripts/build/registry/validate-env.test.mjs +92 -0
- package/scripts/build/registry.mjs +18 -1
- package/scripts/deploy/vercel-deploy.mjs +1 -1
- package/templates/app/api/devtools/config/entities/route.ts +18 -11
- package/templates/app/api/devtools/config/theme/route.ts +5 -4
- package/templates/app/api/devtools/tests/[...path]/route.ts +6 -5
- package/templates/app/api/devtools/tests/route.ts +5 -4
- package/templates/app/api/health/route.ts +6 -4
- package/templates/app/api/internal/user-metadata/route.ts +3 -2
- package/templates/app/api/superadmin/subscriptions/route.ts +5 -6
- package/templates/app/api/superadmin/teams/[teamId]/route.ts +6 -7
- package/templates/app/api/superadmin/teams/route.ts +5 -6
- package/templates/app/api/superadmin/users/[userId]/route.ts +11 -16
- package/templates/app/api/superadmin/users/route.ts +9 -10
- package/templates/app/api/user/delete-account/route.ts +3 -2
- package/templates/app/api/user/plan-flags/route.ts +11 -24
- package/templates/app/api/user/profile/route.ts +7 -6
- package/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +16 -18
- package/templates/app/api/v1/[entity]/[id]/child/[childType]/route.ts +17 -19
- package/templates/app/api/v1/[entity]/[id]/route.ts +10 -12
- package/templates/app/api/v1/[entity]/route.ts +9 -11
- package/templates/app/api/v1/api-keys/[id]/route.ts +9 -8
- package/templates/app/api/v1/api-keys/route.ts +7 -6
- package/templates/app/api/v1/auth/signup-with-invite/route.ts +3 -2
- package/templates/app/api/v1/billing/cancel/route.ts +15 -14
- package/templates/app/api/v1/billing/change-plan/route.ts +10 -9
- package/templates/app/api/v1/billing/check-action/route.ts +8 -7
- package/templates/app/api/v1/billing/checkout/route.ts +10 -9
- package/templates/app/api/v1/billing/plans/route.ts +5 -4
- package/templates/app/api/v1/billing/portal/route.ts +9 -8
- package/templates/app/api/v1/blocks/[slug]/route.ts +4 -3
- package/templates/app/api/v1/blocks/route.ts +3 -2
- package/templates/app/api/v1/blocks/validate/route.ts +5 -3
- package/templates/app/api/v1/cron/process/route.ts +4 -6
- package/templates/app/api/v1/devtools/blocks/route.ts +3 -2
- package/templates/app/api/v1/devtools/docs/route.ts +3 -2
- package/templates/app/api/v1/devtools/features/route.ts +3 -2
- package/templates/app/api/v1/devtools/flows/route.ts +3 -2
- package/templates/app/api/v1/devtools/scheduled-actions/route.ts +125 -3
- package/templates/app/api/v1/devtools/scheduled-actions/run/route.ts +110 -0
- package/templates/app/api/v1/devtools/testing/route.ts +3 -2
- package/templates/app/api/v1/media/[id]/route.ts +144 -0
- package/templates/app/api/v1/media/[id]/tags/route.ts +154 -0
- package/templates/app/api/v1/media/check-duplicates/route.ts +56 -0
- package/templates/app/api/v1/media/route.ts +56 -0
- package/templates/app/api/v1/media/upload/route.ts +157 -33
- package/templates/app/api/v1/media-tags/route.ts +65 -0
- package/templates/app/api/v1/plugin/[...path]/route.ts +16 -15
- package/templates/app/api/v1/plugin/route.ts +3 -2
- package/templates/app/api/v1/post-categories/[id]/route.ts +10 -9
- package/templates/app/api/v1/post-categories/route.ts +5 -4
- package/templates/app/api/v1/team-invitations/[token]/accept/route.ts +3 -3
- package/templates/app/api/v1/team-invitations/[token]/decline/route.ts +3 -3
- package/templates/app/api/v1/team-invitations/[token]/route.ts +3 -2
- package/templates/app/api/v1/team-invitations/route.ts +3 -2
- package/templates/app/api/v1/teams/[teamId]/invitations/route.ts +5 -4
- package/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +3 -2
- package/templates/app/api/v1/teams/[teamId]/invoices/route.ts +3 -2
- package/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +5 -4
- package/templates/app/api/v1/teams/[teamId]/members/route.ts +5 -5
- package/templates/app/api/v1/teams/[teamId]/route.ts +31 -58
- package/templates/app/api/v1/teams/[teamId]/subscription/route.ts +3 -2
- package/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +5 -4
- package/templates/app/api/v1/teams/route.ts +18 -17
- package/templates/app/api/v1/teams/switch/route.ts +3 -2
- package/templates/app/api/v1/theme/[...path]/route.ts +16 -15
- package/templates/app/api/v1/theme/route.ts +3 -2
- package/templates/app/api/v1/users/[id]/meta/[key]/route.ts +7 -6
- package/templates/app/api/v1/users/[id]/route.ts +9 -8
- package/templates/app/api/v1/users/route.ts +7 -6
- package/templates/app/dashboard/(main)/media/page.tsx +607 -0
- package/templates/contents/themes/starter/messages/de/dev.json +106 -0
- package/templates/contents/themes/starter/messages/de/index.ts +2 -0
- package/templates/contents/themes/starter/messages/en/dev.json +106 -0
- package/templates/contents/themes/starter/messages/en/index.ts +2 -0
- package/templates/contents/themes/starter/messages/es/dev.json +106 -0
- package/templates/contents/themes/starter/messages/es/index.ts +2 -0
- package/templates/contents/themes/starter/messages/fr/dev.json +106 -0
- package/templates/contents/themes/starter/messages/fr/index.ts +2 -0
- package/templates/contents/themes/starter/messages/it/dev.json +106 -0
- package/templates/contents/themes/starter/messages/it/index.ts +2 -0
- package/templates/contents/themes/starter/messages/pt/dev.json +106 -0
- package/templates/contents/themes/starter/messages/pt/index.ts +2 -0
- package/templates/contents/themes/starter/styles/globals.css +14 -0
- package/templates/instrumentation.ts +33 -0
- package/dist/presets/plugin/.env.example.template +0 -19
- package/dist/presets/plugin/entities/.gitkeep +0 -18
- package/dist/presets/theme/blocks/.gitkeep +0 -17
- package/dist/presets/theme/public/brand/.gitkeep +0 -8
- package/dist/presets/theme/tests/cypress/.gitkeep +0 -10
- package/dist/templates/contents/plugins/starter/plugin/.env.example.template +0 -19
- package/templates/contents/plugins/starter/plugin/.env.example.template +0 -19
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,6 @@ export type { DualAuthResult } from './lib/api/auth/dual-auth';
|
|
|
8
8
|
export { sanitizeUserInput, sanitizeRefinementInstruction, sanitizeContentInput } from './lib/security/input-sanitizer';
|
|
9
9
|
export * from './components/ui';
|
|
10
10
|
export { ThemeToggle } from './components/app/misc/ThemeToggle';
|
|
11
|
-
export {
|
|
11
|
+
export { sel, cySelector } from './lib/selectors';
|
|
12
12
|
export { createAriaLabel } from './lib/test/utils';
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAGhC,mBAAmB,SAAS,CAAA;AAG5B,cAAc,SAAS,CAAA;AAGvB,cAAc,YAAY,CAAA;AAG1B,cAAc,aAAa,CAAA;AAG3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAG9D,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,gCAAgC,CAAA;AAGvC,cAAc,iBAAiB,CAAA;AAG/B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAGhC,mBAAmB,SAAS,CAAA;AAG5B,cAAc,SAAS,CAAA;AAGvB,cAAc,YAAY,CAAA;AAG1B,cAAc,aAAa,CAAA;AAG3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAG9D,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,gCAAgC,CAAA;AAGvC,cAAc,iBAAiB,CAAA;AAG/B,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAI/D,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -10,15 +10,14 @@ import {
|
|
|
10
10
|
} from "./lib/security/input-sanitizer.js";
|
|
11
11
|
export * from "./components/ui/index.js";
|
|
12
12
|
import { ThemeToggle } from "./components/app/misc/ThemeToggle.js";
|
|
13
|
-
import {
|
|
13
|
+
import { sel, cySelector } from "./lib/selectors/index.js";
|
|
14
14
|
import { createAriaLabel } from "./lib/test/utils.js";
|
|
15
15
|
export {
|
|
16
16
|
ThemeToggle,
|
|
17
17
|
authenticateRequest,
|
|
18
18
|
cn,
|
|
19
19
|
createAriaLabel,
|
|
20
|
-
|
|
21
|
-
createTestId,
|
|
20
|
+
cySelector,
|
|
22
21
|
sanitizeContentInput,
|
|
23
22
|
sanitizeRefinementInstruction,
|
|
24
23
|
sanitizeUserInput,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Supports both API Key and Session authentication in a single endpoint.
|
|
5
5
|
* Used by the unified /api/v1/ endpoints.
|
|
6
6
|
*/
|
|
7
|
-
import { NextRequest } from 'next/server';
|
|
7
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
8
8
|
/**
|
|
9
9
|
* System Admin Team - Members can bypass team context validation
|
|
10
10
|
* This team is created in core/migrations/090_sample_data.sql
|
|
@@ -51,5 +51,9 @@ export declare function canBypassTeamContext(authResult: DualAuthResult, request
|
|
|
51
51
|
/**
|
|
52
52
|
* Create standardized auth error response
|
|
53
53
|
*/
|
|
54
|
-
export declare function createAuthError(message?: string, status?: number):
|
|
54
|
+
export declare function createAuthError(message?: string, status?: number): NextResponse<{
|
|
55
|
+
success: boolean;
|
|
56
|
+
error: string;
|
|
57
|
+
code: string;
|
|
58
|
+
}>;
|
|
55
59
|
//# sourceMappingURL=dual-auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dual-auth.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/auth/dual-auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"dual-auth.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/auth/dual-auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAQvD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AAExD;;GAEG;AACH,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AACnD,eAAO,MAAM,kBAAkB,8BAA8B,CAAA;AAO7D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAA;IACpC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,iBAAiB,CAAC,EAAE,QAAQ,CAAA;CAC7B;AAqBD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAkBvF;AAqFD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAY3F;AAMD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAkBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAkC,EAAE,MAAM,GAAE,MAAY;;;;GAShG"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
1
2
|
import { auth } from "../../auth.js";
|
|
2
3
|
import { validateApiKey } from "../auth.js";
|
|
3
4
|
import { queryOne } from "../../db.js";
|
|
@@ -133,18 +134,13 @@ async function checkSystemAdminMembership(userId) {
|
|
|
133
134
|
}
|
|
134
135
|
}
|
|
135
136
|
function createAuthError(message = "Authentication required", status = 401) {
|
|
136
|
-
return
|
|
137
|
-
|
|
137
|
+
return NextResponse.json(
|
|
138
|
+
{
|
|
138
139
|
success: false,
|
|
139
140
|
error: message,
|
|
140
141
|
code: "AUTHENTICATION_FAILED"
|
|
141
|
-
}
|
|
142
|
-
{
|
|
143
|
-
status,
|
|
144
|
-
headers: {
|
|
145
|
-
"Content-Type": "application/json"
|
|
146
|
-
}
|
|
147
|
-
}
|
|
142
|
+
},
|
|
143
|
+
{ status }
|
|
148
144
|
);
|
|
149
145
|
}
|
|
150
146
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-handler.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/entity/generic-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA2VvD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAobnF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"generic-handler.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/entity/generic-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA2VvD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAobnF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CA2SrF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAkKpJ;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAyStJ;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAqGtJ;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAEtF"}
|
|
@@ -275,7 +275,7 @@ async function handleGenericList(request) {
|
|
|
275
275
|
return `t.${columnName}`;
|
|
276
276
|
}).join(", ");
|
|
277
277
|
} else {
|
|
278
|
-
const systemFields = ["id", "createdAt", "updatedAt"];
|
|
278
|
+
const systemFields = ["id", "userId", "teamId", "createdAt", "updatedAt"];
|
|
279
279
|
if ((_b = entityConfig.builder) == null ? void 0 : _b.enabled) {
|
|
280
280
|
systemFields.push("blocks");
|
|
281
281
|
}
|
|
@@ -628,7 +628,7 @@ async function handleGenericCreate(request) {
|
|
|
628
628
|
`;
|
|
629
629
|
const insertResult = await mutateWithRLS(insertQuery, values, authResult.user.id);
|
|
630
630
|
const createdEntityId = String((_d = insertResult.rows[0]) == null ? void 0 : _d.id);
|
|
631
|
-
const systemFields = ["id", "userId", "createdAt", "updatedAt"];
|
|
631
|
+
const systemFields = ["id", "userId", "teamId", "createdAt", "updatedAt"];
|
|
632
632
|
if ((_e = entityConfig.builder) == null ? void 0 : _e.enabled) {
|
|
633
633
|
systemFields.push("blocks");
|
|
634
634
|
}
|
|
@@ -730,7 +730,7 @@ async function handleGenericRead(request, { params }) {
|
|
|
730
730
|
}
|
|
731
731
|
const entityConfig = resolution.entityConfig;
|
|
732
732
|
const tableName = getTableName(entityConfig);
|
|
733
|
-
const systemFields = ["id", "createdAt", "updatedAt"];
|
|
733
|
+
const systemFields = ["id", "userId", "teamId", "createdAt", "updatedAt"];
|
|
734
734
|
if ((_b = entityConfig.builder) == null ? void 0 : _b.enabled) {
|
|
735
735
|
systemFields.push("blocks");
|
|
736
736
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/app.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAMxC,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"app.config.d.ts","sourceRoot":"","sources":["../../../src/lib/config/app.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAMxC,eAAO,MAAM,kBAAkB,EAAE,SA0bhC,CAAA"}
|
|
@@ -304,6 +304,43 @@ const DEFAULT_APP_CONFIG = {
|
|
|
304
304
|
defaultTimeout: 3e4
|
|
305
305
|
},
|
|
306
306
|
// =============================================================================
|
|
307
|
+
// MEDIA LIBRARY CONFIGURATION
|
|
308
|
+
// =============================================================================
|
|
309
|
+
media: {
|
|
310
|
+
/**
|
|
311
|
+
* Maximum upload file size in MB (general fallback for all file types)
|
|
312
|
+
*/
|
|
313
|
+
maxSizeMB: 10,
|
|
314
|
+
/**
|
|
315
|
+
* Maximum image file size in MB
|
|
316
|
+
* Overrides maxSizeMB for image/* files. Falls back to maxSizeMB if not set.
|
|
317
|
+
*/
|
|
318
|
+
// maxSizeImageMB: 10,
|
|
319
|
+
/**
|
|
320
|
+
* Maximum video file size in MB
|
|
321
|
+
* Overrides maxSizeMB for video/* files. Falls back to maxSizeMB if not set.
|
|
322
|
+
*/
|
|
323
|
+
// maxSizeVideoMB: 50,
|
|
324
|
+
/**
|
|
325
|
+
* Accepted MIME type patterns for the client-side file input
|
|
326
|
+
*/
|
|
327
|
+
acceptedTypes: ["image/*", "video/*"],
|
|
328
|
+
/**
|
|
329
|
+
* Specific MIME types allowed by the server-side upload endpoint
|
|
330
|
+
*/
|
|
331
|
+
allowedMimeTypes: [
|
|
332
|
+
"image/jpeg",
|
|
333
|
+
"image/jpg",
|
|
334
|
+
"image/png",
|
|
335
|
+
"image/gif",
|
|
336
|
+
"image/webp",
|
|
337
|
+
"video/mp4",
|
|
338
|
+
"video/mpeg",
|
|
339
|
+
"video/quicktime",
|
|
340
|
+
"video/webm"
|
|
341
|
+
]
|
|
342
|
+
},
|
|
343
|
+
// =============================================================================
|
|
307
344
|
// MOBILE NAVIGATION CONFIGURATION
|
|
308
345
|
// =============================================================================
|
|
309
346
|
mobileNav: {
|
|
@@ -27,6 +27,7 @@ export declare const USER_ROLES_CONFIG: any;
|
|
|
27
27
|
export declare const API_CONFIG: any;
|
|
28
28
|
export declare const MOBILE_NAV_CONFIG: any;
|
|
29
29
|
export declare const TEAMS_CONFIG: any;
|
|
30
|
+
export declare const MEDIA_CONFIG: any;
|
|
30
31
|
export declare const TOPBAR_CONFIG: any;
|
|
31
32
|
export declare const SIDEBAR_CONFIG: any;
|
|
32
33
|
export declare const SETTINGS_CONFIG: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-sync.d.ts","sourceRoot":"","sources":["../../../src/lib/config/config-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAyNH,eAAO,MAAM,iBAAiB,KAAkB,CAAA;AAChD,eAAO,MAAM,gBAAgB,KAAwB,CAAA;AACrD,eAAO,MAAM,UAAU,6BAAkB,CAAA;AAGzC,eAAO,MAAM,iBAAiB,KAA0C,CAAA;AACxE,eAAO,MAAM,cAAc,KAAuC,CAAA;AAClE,eAAO,MAAM,eAAe,KAA6C,CAAA;AACzE,eAAO,MAAM,YAAY,KAA0C,CAAA;AACnE,eAAO,MAAM,QAAQ,KAA6B,CAAA;AAClD,eAAO,MAAM,WAAW,KAAgC,CAAA;AAGxD,eAAO,MAAM,WAAW,KAAyB,CAAA;AACjD,eAAO,MAAM,UAAU,KAAwB,CAAA;AAC/C,eAAO,MAAM,iBAAiB,KAA8B,CAAA;AAC5D,eAAO,MAAM,UAAU,KAAwB,CAAA;AAC/C,eAAO,MAAM,iBAAiB,KAA8B,CAAA;AAC5D,eAAO,MAAM,YAAY,KAA0B,CAAA;AAInD,eAAO,MAAM,aAAa,KAA0B,CAAA;AACpD,eAAO,MAAM,cAAc,KAA2B,CAAA;AACtD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,kBAAkB,KAA+B,CAAA;AAC9D,eAAO,MAAM,oBAAoB,KAAiC,CAAA;AAIlE,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,KAAG,OAExD,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,uBAAuB,QAAO,mBAAmB,EAE7D,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,OAExD,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,KAAG,CAAC,GAAG,SAGzF,CAAA;AAGD,MAAM,MAAM,eAAe,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;AACpF,MAAM,MAAM,oBAAoB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;AACnF,MAAM,MAAM,QAAQ,GAAG,OAAO,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"config-sync.d.ts","sourceRoot":"","sources":["../../../src/lib/config/config-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAyNH,eAAO,MAAM,iBAAiB,KAAkB,CAAA;AAChD,eAAO,MAAM,gBAAgB,KAAwB,CAAA;AACrD,eAAO,MAAM,UAAU,6BAAkB,CAAA;AAGzC,eAAO,MAAM,iBAAiB,KAA0C,CAAA;AACxE,eAAO,MAAM,cAAc,KAAuC,CAAA;AAClE,eAAO,MAAM,eAAe,KAA6C,CAAA;AACzE,eAAO,MAAM,YAAY,KAA0C,CAAA;AACnE,eAAO,MAAM,QAAQ,KAA6B,CAAA;AAClD,eAAO,MAAM,WAAW,KAAgC,CAAA;AAGxD,eAAO,MAAM,WAAW,KAAyB,CAAA;AACjD,eAAO,MAAM,UAAU,KAAwB,CAAA;AAC/C,eAAO,MAAM,iBAAiB,KAA8B,CAAA;AAC5D,eAAO,MAAM,UAAU,KAAwB,CAAA;AAC/C,eAAO,MAAM,iBAAiB,KAA8B,CAAA;AAC5D,eAAO,MAAM,YAAY,KAA0B,CAAA;AACnD,eAAO,MAAM,YAAY,KAA0B,CAAA;AAInD,eAAO,MAAM,aAAa,KAA0B,CAAA;AACpD,eAAO,MAAM,cAAc,KAA2B,CAAA;AACtD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,eAAe,KAA4B,CAAA;AACxD,eAAO,MAAM,kBAAkB,KAA+B,CAAA;AAC9D,eAAO,MAAM,oBAAoB,KAAiC,CAAA;AAIlE,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,KAAG,OAExD,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,uBAAuB,QAAO,mBAAmB,EAE7D,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,OAExD,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,KAAG,CAAC,GAAG,SAGzF,CAAA;AAGD,MAAM,MAAM,eAAe,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;AACpF,MAAM,MAAM,oBAAoB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;AACnF,MAAM,MAAM,QAAQ,GAAG,OAAO,iBAAiB,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA"}
|
|
@@ -133,6 +133,7 @@ const USER_ROLES_CONFIG = APP_CONFIG_MERGED.userRoles;
|
|
|
133
133
|
const API_CONFIG = APP_CONFIG_MERGED.api;
|
|
134
134
|
const MOBILE_NAV_CONFIG = APP_CONFIG_MERGED.mobileNav;
|
|
135
135
|
const TEAMS_CONFIG = APP_CONFIG_MERGED.teams;
|
|
136
|
+
const MEDIA_CONFIG = APP_CONFIG_MERGED.media;
|
|
136
137
|
const TOPBAR_CONFIG = DASHBOARD_CONFIG.topbar;
|
|
137
138
|
const SIDEBAR_CONFIG = DASHBOARD_CONFIG.sidebar;
|
|
138
139
|
const SETTINGS_CONFIG = DASHBOARD_CONFIG.settings;
|
|
@@ -168,6 +169,7 @@ export {
|
|
|
168
169
|
ENTITIES_CONFIG,
|
|
169
170
|
HOMEPAGE_CONFIG,
|
|
170
171
|
I18N_CONFIG,
|
|
172
|
+
MEDIA_CONFIG,
|
|
171
173
|
MOBILE_NAV_CONFIG,
|
|
172
174
|
PERFORMANCE_CONFIG,
|
|
173
175
|
SETTINGS_CONFIG,
|
|
@@ -258,6 +258,15 @@ export interface ScheduledActionsConfig {
|
|
|
258
258
|
batchSize: number;
|
|
259
259
|
/** Default timeout per action in milliseconds */
|
|
260
260
|
defaultTimeout: number;
|
|
261
|
+
/**
|
|
262
|
+
* Maximum number of actions to execute in parallel.
|
|
263
|
+
* Actions are executed concurrently up to this limit.
|
|
264
|
+
* Default: 1 (sequential execution for backward compatibility)
|
|
265
|
+
*
|
|
266
|
+
* @example
|
|
267
|
+
* concurrencyLimit: 5 -> Up to 5 actions run simultaneously
|
|
268
|
+
*/
|
|
269
|
+
concurrencyLimit?: number;
|
|
261
270
|
/**
|
|
262
271
|
* @deprecated Use webhooks.endpoints instead for multi-endpoint support
|
|
263
272
|
* Legacy single webhook URL for backward compatibility
|
|
@@ -278,6 +287,24 @@ export interface ScheduledActionsConfig {
|
|
|
278
287
|
windowSeconds: number;
|
|
279
288
|
};
|
|
280
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* Media Library Configuration
|
|
292
|
+
*
|
|
293
|
+
* Controls file upload limits and accepted types for the media system.
|
|
294
|
+
* Themes can override these defaults in their app.config.ts.
|
|
295
|
+
*/
|
|
296
|
+
export interface MediaConfig {
|
|
297
|
+
/** Maximum upload file size in MB (general fallback) */
|
|
298
|
+
maxSizeMB: number;
|
|
299
|
+
/** Maximum image file size in MB (overrides maxSizeMB for images). Falls back to maxSizeMB if not set. */
|
|
300
|
+
maxSizeImageMB?: number;
|
|
301
|
+
/** Maximum video file size in MB (overrides maxSizeMB for videos). Falls back to maxSizeMB if not set. */
|
|
302
|
+
maxSizeVideoMB?: number;
|
|
303
|
+
/** Accepted MIME type patterns for the file input (e.g., ['image/*', 'video/*']) */
|
|
304
|
+
acceptedTypes: string[];
|
|
305
|
+
/** Specific MIME types allowed by the server-side upload endpoint */
|
|
306
|
+
allowedMimeTypes: string[];
|
|
307
|
+
}
|
|
281
308
|
/**
|
|
282
309
|
* Complete Application Configuration
|
|
283
310
|
*
|
|
@@ -324,6 +351,8 @@ export interface AppConfig {
|
|
|
324
351
|
teamRoles?: TeamRolesConfig;
|
|
325
352
|
/** Scheduled actions system configuration */
|
|
326
353
|
scheduledActions?: ScheduledActionsConfig;
|
|
354
|
+
/** Media library configuration */
|
|
355
|
+
media?: MediaConfig;
|
|
327
356
|
[key: string]: any;
|
|
328
357
|
}
|
|
329
358
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const createMediaSchema: z.ZodObject<{
|
|
3
|
+
url: z.ZodString;
|
|
4
|
+
filename: z.ZodString;
|
|
5
|
+
fileSize: z.ZodNumber;
|
|
6
|
+
mimeType: z.ZodString;
|
|
7
|
+
width: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
8
|
+
height: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
9
|
+
title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
10
|
+
alt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
11
|
+
caption: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
export declare const updateMediaSchema: z.ZodObject<{
|
|
14
|
+
title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
15
|
+
alt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
16
|
+
caption: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export declare const mediaListQuerySchema: z.ZodObject<{
|
|
19
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
20
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodCoercedNumber<unknown>>>;
|
|
21
|
+
orderBy: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
22
|
+
createdAt: "createdAt";
|
|
23
|
+
filename: "filename";
|
|
24
|
+
fileSize: "fileSize";
|
|
25
|
+
}>>>;
|
|
26
|
+
orderDir: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
27
|
+
asc: "asc";
|
|
28
|
+
desc: "desc";
|
|
29
|
+
}>>>;
|
|
30
|
+
type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
31
|
+
image: "image";
|
|
32
|
+
video: "video";
|
|
33
|
+
all: "all";
|
|
34
|
+
}>>>;
|
|
35
|
+
search: z.ZodOptional<z.ZodString>;
|
|
36
|
+
tagIds: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>>;
|
|
37
|
+
tagSlugs: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/lib/media/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,iBAAiB;;;;;;;;;;iBAU5B,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;iBAS/B,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const createMediaSchema = z.object({
|
|
3
|
+
url: z.string().url("Invalid URL format"),
|
|
4
|
+
filename: z.string().min(1).max(255),
|
|
5
|
+
fileSize: z.number().int().positive(),
|
|
6
|
+
mimeType: z.string().min(1),
|
|
7
|
+
width: z.number().int().positive().nullable().optional(),
|
|
8
|
+
height: z.number().int().positive().nullable().optional(),
|
|
9
|
+
title: z.string().max(255).nullable().optional(),
|
|
10
|
+
alt: z.string().max(500).nullable().optional(),
|
|
11
|
+
caption: z.string().max(1e3).nullable().optional()
|
|
12
|
+
});
|
|
13
|
+
const updateMediaSchema = z.object({
|
|
14
|
+
title: z.string().max(255).nullable().optional(),
|
|
15
|
+
alt: z.string().max(500).nullable().optional(),
|
|
16
|
+
caption: z.string().max(1e3).nullable().optional()
|
|
17
|
+
});
|
|
18
|
+
const mediaListQuerySchema = z.object({
|
|
19
|
+
limit: z.coerce.number().int().min(1).max(100).optional().default(20),
|
|
20
|
+
offset: z.coerce.number().int().min(0).optional().default(0),
|
|
21
|
+
orderBy: z.enum(["createdAt", "filename", "fileSize"]).optional().default("createdAt"),
|
|
22
|
+
orderDir: z.enum(["asc", "desc"]).optional().default("desc"),
|
|
23
|
+
type: z.enum(["image", "video", "all"]).optional().default("all"),
|
|
24
|
+
search: z.string().optional(),
|
|
25
|
+
tagIds: z.string().transform((s) => s ? s.split(",").filter(Boolean) : []).optional(),
|
|
26
|
+
tagSlugs: z.string().transform((s) => s ? s.split(",").filter(Boolean) : []).optional()
|
|
27
|
+
});
|
|
28
|
+
export {
|
|
29
|
+
createMediaSchema,
|
|
30
|
+
mediaListQuerySchema,
|
|
31
|
+
updateMediaSchema
|
|
32
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media Types
|
|
3
|
+
* Core types for the media library entity.
|
|
4
|
+
*/
|
|
5
|
+
export type MediaStatus = 'active' | 'deleted';
|
|
6
|
+
export interface Media {
|
|
7
|
+
id: string;
|
|
8
|
+
userId: string;
|
|
9
|
+
teamId: string;
|
|
10
|
+
url: string;
|
|
11
|
+
filename: string;
|
|
12
|
+
fileSize: number;
|
|
13
|
+
mimeType: string;
|
|
14
|
+
width: number | null;
|
|
15
|
+
height: number | null;
|
|
16
|
+
title: string | null;
|
|
17
|
+
alt: string | null;
|
|
18
|
+
caption: string | null;
|
|
19
|
+
status: MediaStatus;
|
|
20
|
+
createdAt: string;
|
|
21
|
+
updatedAt: string;
|
|
22
|
+
}
|
|
23
|
+
export interface CreateMediaInput {
|
|
24
|
+
url: string;
|
|
25
|
+
filename: string;
|
|
26
|
+
fileSize: number;
|
|
27
|
+
mimeType: string;
|
|
28
|
+
width?: number | null;
|
|
29
|
+
height?: number | null;
|
|
30
|
+
title?: string | null;
|
|
31
|
+
alt?: string | null;
|
|
32
|
+
caption?: string | null;
|
|
33
|
+
}
|
|
34
|
+
export interface UpdateMediaInput {
|
|
35
|
+
title?: string | null;
|
|
36
|
+
alt?: string | null;
|
|
37
|
+
caption?: string | null;
|
|
38
|
+
}
|
|
39
|
+
export interface MediaListOptions {
|
|
40
|
+
limit?: number;
|
|
41
|
+
offset?: number;
|
|
42
|
+
orderBy?: 'createdAt' | 'filename' | 'fileSize';
|
|
43
|
+
orderDir?: 'asc' | 'desc';
|
|
44
|
+
type?: 'image' | 'video' | 'all';
|
|
45
|
+
search?: string;
|
|
46
|
+
status?: MediaStatus;
|
|
47
|
+
tagIds?: string[];
|
|
48
|
+
tagSlugs?: string[];
|
|
49
|
+
}
|
|
50
|
+
export interface MediaListResult {
|
|
51
|
+
data: Media[];
|
|
52
|
+
total: number;
|
|
53
|
+
limit: number;
|
|
54
|
+
offset: number;
|
|
55
|
+
}
|
|
56
|
+
export interface MediaTag {
|
|
57
|
+
id: string;
|
|
58
|
+
type: string;
|
|
59
|
+
slug: string;
|
|
60
|
+
name: string;
|
|
61
|
+
description: string | null;
|
|
62
|
+
icon: string | null;
|
|
63
|
+
color: string | null;
|
|
64
|
+
order: number;
|
|
65
|
+
isActive: boolean;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
updatedAt: string;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/media/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE9C,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU,CAAA;IAC/C,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACzB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,EAAE,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB"}
|
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media Utilities
|
|
3
|
+
* Image dimension extraction and MIME type helpers.
|
|
4
|
+
*/
|
|
5
|
+
export interface ImageDimensions {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Extract image dimensions from a Buffer using sharp.
|
|
11
|
+
* Returns null for non-image files or if sharp is not available.
|
|
12
|
+
*
|
|
13
|
+
* Sharp is dynamically imported because it is a heavy native module (~2MB)
|
|
14
|
+
* that should only be loaded when actually processing images.
|
|
15
|
+
* This is an ALLOWED exception per the dynamic import policy (heavy user-triggered library).
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractImageDimensions(buffer: Buffer, mimeType: string): Promise<ImageDimensions | null>;
|
|
18
|
+
/**
|
|
19
|
+
* Determine media type category from MIME type
|
|
20
|
+
*/
|
|
21
|
+
export declare function getMediaTypeCategory(mimeType: string): 'image' | 'video' | 'other';
|
|
22
|
+
/**
|
|
23
|
+
* Sanitize filename for safe storage
|
|
24
|
+
*/
|
|
25
|
+
export declare function sanitizeFilename(filename: string): string;
|
|
26
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/media/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAsBjC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAIlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKzD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
async function extractImageDimensions(buffer, mimeType) {
|
|
2
|
+
if (!mimeType.startsWith("image/")) {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
try {
|
|
6
|
+
const sharpModule = await import("sharp");
|
|
7
|
+
const sharp = "default" in sharpModule ? sharpModule.default : sharpModule;
|
|
8
|
+
const metadata = await sharp(buffer).metadata();
|
|
9
|
+
if (metadata.width && metadata.height) {
|
|
10
|
+
return {
|
|
11
|
+
width: metadata.width,
|
|
12
|
+
height: metadata.height
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
} catch {
|
|
17
|
+
console.warn("[Media] Failed to extract image dimensions");
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function getMediaTypeCategory(mimeType) {
|
|
22
|
+
if (mimeType.startsWith("image/")) return "image";
|
|
23
|
+
if (mimeType.startsWith("video/")) return "video";
|
|
24
|
+
return "other";
|
|
25
|
+
}
|
|
26
|
+
function sanitizeFilename(filename) {
|
|
27
|
+
return filename.replace(/[^a-zA-Z0-9._-]/g, "-").replace(/-+/g, "-").substring(0, 255);
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
extractImageDimensions,
|
|
31
|
+
getMediaTypeCategory,
|
|
32
|
+
sanitizeFilename
|
|
33
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit-redis.d.ts","sourceRoot":"","sources":["../../src/lib/rate-limit-redis.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgIH,eAAO,MAAM,eAAe,KAAO,CAAA;AACnC,eAAO,MAAM,cAAc,KAAO,CAAA;AAClC,eAAO,MAAM,iBAAiB,KAAO,CAAA;AAErC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"rate-limit-redis.d.ts","sourceRoot":"","sources":["../../src/lib/rate-limit-redis.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgIH,eAAO,MAAM,eAAe,KAAO,CAAA;AACnC,eAAO,MAAM,cAAc,KAAO,CAAA;AAClC,eAAO,MAAM,iBAAiB,KAAO,CAAA;AAErC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAaxE;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,aAAqB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CA+C/B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG1D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CAe9E"}
|
|
@@ -72,6 +72,13 @@ async function loadUpstashModules() {
|
|
|
72
72
|
const authRateLimiter = null;
|
|
73
73
|
const apiRateLimiter = null;
|
|
74
74
|
const strictRateLimiter = null;
|
|
75
|
+
const DEFAULT_TIER_LIMITS = {
|
|
76
|
+
auth: 5,
|
|
77
|
+
api: 100,
|
|
78
|
+
strict: 10,
|
|
79
|
+
read: 200,
|
|
80
|
+
write: 50
|
|
81
|
+
};
|
|
75
82
|
async function checkRateLimit(identifier, type = "api") {
|
|
76
83
|
await loadUpstashModules();
|
|
77
84
|
const limiterMap = {
|
|
@@ -86,8 +93,9 @@ async function checkRateLimit(identifier, type = "api") {
|
|
|
86
93
|
console.warn("[RateLimit] FALLBACK MODE: Rate limiting disabled - Redis unavailable. Identifier:", identifier, "Tier:", type);
|
|
87
94
|
return {
|
|
88
95
|
success: true,
|
|
89
|
-
remaining:
|
|
90
|
-
reset: Date.now() + 6e4
|
|
96
|
+
remaining: DEFAULT_TIER_LIMITS[type],
|
|
97
|
+
reset: Date.now() + 6e4,
|
|
98
|
+
limit: DEFAULT_TIER_LIMITS[type]
|
|
91
99
|
};
|
|
92
100
|
}
|
|
93
101
|
try {
|
|
@@ -104,8 +112,9 @@ async function checkRateLimit(identifier, type = "api") {
|
|
|
104
112
|
console.error("[RateLimit] Redis error:", error);
|
|
105
113
|
return {
|
|
106
114
|
success: true,
|
|
107
|
-
remaining:
|
|
108
|
-
reset: Date.now() + 6e4
|
|
115
|
+
remaining: DEFAULT_TIER_LIMITS[type],
|
|
116
|
+
reset: Date.now() + 6e4,
|
|
117
|
+
limit: DEFAULT_TIER_LIMITS[type]
|
|
109
118
|
};
|
|
110
119
|
}
|
|
111
120
|
}
|
|
@@ -14,11 +14,11 @@ import 'server-only';
|
|
|
14
14
|
* This function reads from the auto-generated registry and calls
|
|
15
15
|
* the theme's registerAllHandlers function to register action handlers.
|
|
16
16
|
*
|
|
17
|
-
* Should be called at server startup (
|
|
17
|
+
* Should be called at server startup (typically in instrumentation.ts)
|
|
18
18
|
*
|
|
19
19
|
* @example
|
|
20
|
-
* // In
|
|
21
|
-
* import { initializeScheduledActions } from '
|
|
20
|
+
* // In instrumentation.ts
|
|
21
|
+
* import { initializeScheduledActions } from '@nextsparkjs/core/lib/scheduled-actions'
|
|
22
22
|
* initializeScheduledActions()
|
|
23
23
|
*/
|
|
24
24
|
export declare function initializeScheduledActions(): void;
|
|
@@ -28,6 +28,9 @@ export declare function initializeScheduledActions(): void;
|
|
|
28
28
|
* This async function reads from the auto-generated registry and calls
|
|
29
29
|
* the theme's registerRecurringActions function to schedule recurring tasks.
|
|
30
30
|
*
|
|
31
|
+
* Includes guard to prevent duplicate DB queries in same server instance.
|
|
32
|
+
* Theme's registerRecurringActions should also check DB for existing actions.
|
|
33
|
+
*
|
|
31
34
|
* Should be called after handlers are registered.
|
|
32
35
|
*
|
|
33
36
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializer.d.ts","sourceRoot":"","sources":["../../../src/lib/scheduled-actions/initializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"initializer.d.ts","sourceRoot":"","sources":["../../../src/lib/scheduled-actions/initializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,aAAa,CAAA;AAkBpB;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAiBjD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhE"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import "server-only";
|
|
2
2
|
import { SCHEDULED_ACTIONS_REGISTRY } from "@nextsparkjs/registries/scheduled-actions-registry";
|
|
3
|
-
|
|
3
|
+
const globalForInit = globalThis;
|
|
4
4
|
function getActiveTheme() {
|
|
5
5
|
var _a;
|
|
6
6
|
return ((_a = process.env.NEXT_PUBLIC_ACTIVE_THEME) == null ? void 0 : _a.replace(/'/g, "")) || "default";
|
|
7
7
|
}
|
|
8
8
|
function initializeScheduledActions() {
|
|
9
|
-
if (
|
|
10
|
-
console.log("[ScheduledActions]
|
|
9
|
+
if (globalForInit.__scheduledActionsHandlersInitialized) {
|
|
10
|
+
console.log("[ScheduledActions] Handlers already initialized, skipping...");
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
13
|
const themeName = getActiveTheme();
|
|
@@ -15,19 +15,24 @@ function initializeScheduledActions() {
|
|
|
15
15
|
if (module) {
|
|
16
16
|
console.log(`[ScheduledActions] Initializing handlers for theme: ${themeName}`);
|
|
17
17
|
module.registerAllHandlers();
|
|
18
|
-
|
|
19
|
-
console.log(`[ScheduledActions] Handlers initialized successfully`);
|
|
18
|
+
globalForInit.__scheduledActionsHandlersInitialized = true;
|
|
19
|
+
console.log(`[ScheduledActions] \u2705 Handlers initialized successfully`);
|
|
20
20
|
} else {
|
|
21
21
|
console.warn(`[ScheduledActions] No handlers found for theme: ${themeName}`);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
async function initializeRecurringActions() {
|
|
25
|
+
if (globalForInit.__scheduledActionsRecurringInitialized) {
|
|
26
|
+
console.log("[ScheduledActions] Recurring actions already initialized, skipping...");
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
25
29
|
const themeName = getActiveTheme();
|
|
26
30
|
const module = SCHEDULED_ACTIONS_REGISTRY[themeName];
|
|
27
31
|
if (module) {
|
|
28
32
|
console.log(`[ScheduledActions] Initializing recurring actions for theme: ${themeName}`);
|
|
29
33
|
await module.registerRecurringActions();
|
|
30
|
-
|
|
34
|
+
globalForInit.__scheduledActionsRecurringInitialized = true;
|
|
35
|
+
console.log(`[ScheduledActions] \u2705 Recurring actions initialized successfully`);
|
|
31
36
|
} else {
|
|
32
37
|
console.warn(`[ScheduledActions] No recurring actions found for theme: ${themeName}`);
|
|
33
38
|
}
|