alepha 0.13.6 → 0.13.8
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/README.md +5 -2
- package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
- package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
- package/assets/swagger-ui/swagger-ui.css +1 -1
- package/dist/api/audits/index.browser.js +116 -0
- package/dist/api/audits/index.browser.js.map +1 -0
- package/dist/api/audits/index.d.ts +1194 -0
- package/dist/api/audits/index.js +674 -0
- package/dist/api/audits/index.js.map +1 -0
- package/dist/{api-files → api/files}/index.browser.js +5 -5
- package/dist/api/files/index.browser.js.map +1 -0
- package/dist/{api-files → api/files}/index.d.ts +16 -9
- package/dist/{api-files → api/files}/index.js +10 -10
- package/dist/api/files/index.js.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
- package/dist/api/jobs/index.browser.js.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.d.ts +35 -35
- package/dist/{api-jobs → api/jobs}/index.js +9 -9
- package/dist/api/jobs/index.js.map +1 -0
- package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
- package/dist/api/notifications/index.browser.js.map +1 -0
- package/dist/api/notifications/index.d.ts +327 -0
- package/dist/{api-notifications → api/notifications}/index.js +11 -11
- package/dist/api/notifications/index.js.map +1 -0
- package/dist/api/parameters/index.browser.js +60 -0
- package/dist/api/parameters/index.browser.js.map +1 -0
- package/dist/api/parameters/index.d.ts +761 -0
- package/dist/api/parameters/index.js +877 -0
- package/dist/api/parameters/index.js.map +1 -0
- package/dist/{api-users → api/users}/index.browser.js +6 -6
- package/dist/api/users/index.browser.js.map +1 -0
- package/dist/{api-users → api/users}/index.d.ts +259 -247
- package/dist/{api-users → api/users}/index.js +125 -112
- package/dist/api/users/index.js.map +1 -0
- package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
- package/dist/api/verifications/index.browser.js.map +1 -0
- package/dist/api/verifications/index.d.ts +248 -0
- package/dist/{api-verifications → api/verifications}/index.js +13 -12
- package/dist/api/verifications/index.js.map +1 -0
- package/dist/bin/index.js +1 -0
- package/dist/bin/index.js.map +1 -1
- package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
- package/dist/cache/{index.js → core/index.js} +5 -5
- package/dist/cache/core/index.js.map +1 -0
- package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
- package/dist/{cache-redis → cache/redis}/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -0
- package/dist/cli/index.d.ts +71 -9
- package/dist/cli/index.js +280 -79
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +63 -2
- package/dist/command/index.js +30 -3
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +241 -61
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +170 -90
- package/dist/core/index.js +264 -67
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +248 -65
- package/dist/core/index.native.js.map +1 -1
- package/dist/email/index.js +15 -10554
- package/dist/email/index.js.map +1 -1
- package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
- package/dist/lock/{index.js → core/index.js} +5 -5
- package/dist/lock/core/index.js.map +1 -0
- package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
- package/dist/{lock-redis → lock/redis}/index.js +2 -2
- package/dist/lock/redis/index.js.map +1 -0
- package/dist/logger/index.d.ts +4 -4
- package/dist/logger/index.js +77 -72
- package/dist/logger/index.js.map +1 -1
- package/dist/orm/index.d.ts +5 -1
- package/dist/orm/index.js +24 -7
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +548 -0
- package/dist/queue/core/index.js +391 -0
- package/dist/queue/core/index.js.map +1 -0
- package/dist/queue/redis/index.d.ts +28 -0
- package/dist/queue/redis/index.js +43 -0
- package/dist/queue/redis/index.js.map +1 -0
- package/dist/scheduler/index.d.ts +7 -7
- package/dist/scheduler/index.js +1 -393
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.js +2 -1413
- package/dist/security/index.js.map +1 -1
- package/dist/{server-auth → server/auth}/index.browser.js +6 -6
- package/dist/server/auth/index.browser.js.map +1 -0
- package/dist/{server-auth → server/auth}/index.d.ts +175 -164
- package/dist/server/auth/index.js +742 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/{server-cache → server/cache}/index.d.ts +2 -2
- package/dist/{server-cache → server/cache}/index.js +2 -2
- package/dist/server/cache/index.js.map +1 -0
- package/dist/{server-compress → server/compress}/index.d.ts +2 -2
- package/dist/{server-compress → server/compress}/index.js +2 -2
- package/dist/server/compress/index.js.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
- package/dist/server/cookies/index.browser.js.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
- package/dist/{server-cookies → server/cookies}/index.js +9 -5
- package/dist/server/cookies/index.js.map +1 -0
- package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
- package/dist/server/core/index.browser.js.map +1 -0
- package/dist/server/{index.d.ts → core/index.d.ts} +46 -37
- package/dist/server/{index.js → core/index.js} +47 -33
- package/dist/server/core/index.js.map +1 -0
- package/dist/{server-cors → server/cors}/index.d.ts +3 -3
- package/dist/{server-cors → server/cors}/index.js +3 -3
- package/dist/server/cors/index.js.map +1 -0
- package/dist/{server-health → server/health}/index.d.ts +3 -3
- package/dist/{server-health → server/health}/index.js +3 -3
- package/dist/server/health/index.js.map +1 -0
- package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
- package/dist/{server-helmet → server/helmet}/index.js +2 -2
- package/dist/server/helmet/index.js.map +1 -0
- package/dist/{server-links → server/links}/index.browser.js +5 -5
- package/dist/server/links/index.browser.js.map +1 -0
- package/dist/{server-links → server/links}/index.d.ts +40 -40
- package/dist/{server-links → server/links}/index.js +7 -7
- package/dist/server/links/index.js.map +1 -0
- package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
- package/dist/server/metrics/index.js +74 -0
- package/dist/server/metrics/index.js.map +1 -0
- package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
- package/dist/{server-multipart → server/multipart}/index.js +2 -2
- package/dist/server/multipart/index.js.map +1 -0
- package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
- package/dist/{server-proxy → server/proxy}/index.js +3 -3
- package/dist/server/proxy/index.js.map +1 -0
- package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
- package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
- package/dist/server/rate-limit/index.js.map +1 -0
- package/dist/{server-security → server/security}/index.browser.js +1 -1
- package/dist/server/security/index.browser.js.map +1 -0
- package/dist/{server-security → server/security}/index.d.ts +4 -4
- package/dist/{server-security → server/security}/index.js +4 -4
- package/dist/server/security/index.js.map +1 -0
- package/dist/{server-static → server/static}/index.d.ts +3 -3
- package/dist/{server-static → server/static}/index.js +3 -3
- package/dist/server/static/index.js.map +1 -0
- package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
- package/dist/{server-swagger → server/swagger}/index.js +4 -4
- package/dist/server/swagger/index.js.map +1 -0
- package/dist/thread/index.js +2 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
- package/dist/topic/{index.js → core/index.js} +6 -6
- package/dist/topic/core/index.js.map +1 -0
- package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
- package/dist/{topic-redis → topic/redis}/index.js +2 -2
- package/dist/topic/redis/index.js.map +1 -0
- package/dist/vite/index.d.ts +13 -2
- package/dist/vite/index.js +114 -50
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +3 -3
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.js +4 -4
- package/dist/websocket/index.js.map +1 -1
- package/package.json +160 -156
- package/src/api/audits/controllers/AuditController.ts +186 -0
- package/src/api/audits/entities/audits.ts +132 -0
- package/src/api/audits/index.browser.ts +18 -0
- package/src/api/audits/index.ts +58 -0
- package/src/api/audits/primitives/$audit.ts +159 -0
- package/src/api/audits/schemas/auditQuerySchema.ts +23 -0
- package/src/api/audits/schemas/auditResourceSchema.ts +9 -0
- package/src/api/audits/schemas/createAuditSchema.ts +27 -0
- package/src/api/audits/services/AuditService.ts +412 -0
- package/src/{api-files → api/files}/index.ts +1 -0
- package/src/api/parameters/controllers/ConfigController.ts +324 -0
- package/src/api/parameters/entities/parameters.ts +113 -0
- package/src/api/parameters/index.ts +60 -0
- package/src/api/parameters/primitives/$config.ts +351 -0
- package/src/api/parameters/schedulers/ConfigActivationScheduler.ts +30 -0
- package/src/api/parameters/services/ConfigStore.ts +491 -0
- package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +19 -0
- package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -2
- package/src/{api-users → api/users}/index.ts +2 -0
- package/src/{api-users → api/users}/primitives/$userRealm.ts +18 -3
- package/src/{api-users → api/users}/providers/UserRealmProvider.ts +12 -10
- package/src/{api-users → api/users}/services/RegistrationService.ts +2 -1
- package/src/{api-users → api/users}/services/SessionService.ts +4 -0
- package/src/{api-users → api/users}/services/UserService.ts +3 -0
- package/src/{api-verifications → api/verifications}/index.ts +9 -1
- package/src/bin/index.ts +1 -0
- package/src/cli/apps/AlephaPackageBuilderCli.ts +73 -48
- package/src/cli/assets/appRouterTs.ts +1 -1
- package/src/cli/assets/biomeJson.ts +2 -2
- package/src/cli/assets/dummySpecTs.ts +7 -0
- package/src/cli/assets/editorconfig.ts +13 -0
- package/src/cli/assets/indexHtml.ts +1 -1
- package/src/cli/assets/mainBrowserTs.ts +1 -1
- package/src/cli/assets/mainTs.ts +14 -0
- package/src/cli/assets/viteConfigTs.ts +1 -1
- package/src/cli/commands/BiomeCommands.ts +2 -0
- package/src/cli/commands/CoreCommands.ts +38 -15
- package/src/cli/commands/VerifyCommands.ts +6 -2
- package/src/cli/commands/ViteCommands.ts +28 -18
- package/src/cli/services/AlephaCliUtils.ts +243 -37
- package/src/command/helpers/Asker.ts +0 -1
- package/src/command/primitives/$command.ts +67 -0
- package/src/command/providers/CliProvider.ts +39 -8
- package/src/core/Alepha.ts +40 -30
- package/src/core/helpers/jsonSchemaToTypeBox.ts +307 -0
- package/src/core/index.shared.ts +1 -0
- package/src/core/index.ts +30 -3
- package/src/core/providers/EventManager.ts +1 -1
- package/src/core/providers/SchemaValidator.ts +1 -1
- package/src/core/providers/StateManager.ts +23 -12
- package/src/core/providers/TypeProvider.ts +26 -34
- package/src/logger/index.ts +8 -6
- package/src/logger/primitives/$logger.ts +1 -1
- package/src/logger/providers/{SimpleFormatterProvider.ts → PrettyFormatterProvider.ts} +10 -1
- package/src/orm/index.ts +6 -0
- package/src/orm/services/PgRelationManager.ts +2 -2
- package/src/orm/services/PostgresModelBuilder.ts +11 -7
- package/src/orm/services/Repository.ts +16 -7
- package/src/orm/services/SqliteModelBuilder.ts +10 -0
- package/src/queue/{index.ts → core/index.ts} +2 -3
- package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
- package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
- package/src/queue/core/providers/QueueProvider.ts +23 -0
- package/src/queue/core/providers/WorkerProvider.ts +244 -0
- package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
- package/src/{server-auth → server/auth}/primitives/$auth.ts +7 -0
- package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +51 -8
- package/src/{server-cookies → server/cookies}/index.ts +2 -1
- package/src/server/{index.ts → core/index.ts} +7 -0
- package/src/server/{primitives → core/primitives}/$action.ts +10 -1
- package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +11 -5
- package/src/server/{providers → core/providers}/ServerRouterProvider.ts +13 -7
- package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
- package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
- package/src/thread/primitives/$thread.ts +2 -2
- package/src/vite/index.ts +0 -2
- package/src/vite/tasks/buildServer.ts +3 -4
- package/src/vite/tasks/copyAssets.ts +32 -8
- package/src/vite/tasks/generateCloudflare.ts +35 -19
- package/src/vite/tasks/generateDocker.ts +18 -4
- package/src/vite/tasks/generateSitemap.ts +5 -7
- package/src/vite/tasks/generateVercel.ts +76 -41
- package/src/vite/tasks/runAlepha.ts +16 -1
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -11
- package/src/websocket/services/WebSocketClient.ts +3 -3
- package/dist/api-files/index.browser.js.map +0 -1
- package/dist/api-files/index.js.map +0 -1
- package/dist/api-jobs/index.browser.js.map +0 -1
- package/dist/api-jobs/index.js.map +0 -1
- package/dist/api-notifications/index.browser.js.map +0 -1
- package/dist/api-notifications/index.d.ts +0 -327
- package/dist/api-notifications/index.js.map +0 -1
- package/dist/api-parameters/index.browser.js +0 -29
- package/dist/api-parameters/index.browser.js.map +0 -1
- package/dist/api-parameters/index.d.ts +0 -83
- package/dist/api-parameters/index.js +0 -63
- package/dist/api-parameters/index.js.map +0 -1
- package/dist/api-users/index.browser.js.map +0 -1
- package/dist/api-users/index.js.map +0 -1
- package/dist/api-verifications/index.browser.js.map +0 -1
- package/dist/api-verifications/index.d.ts +0 -229
- package/dist/api-verifications/index.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache-redis/index.js.map +0 -1
- package/dist/cli/dist-BlfFtOk2.js +0 -2770
- package/dist/cli/dist-BlfFtOk2.js.map +0 -1
- package/dist/lock/index.js.map +0 -1
- package/dist/lock-redis/index.js.map +0 -1
- package/dist/queue/index.d.ts +0 -1265
- package/dist/queue/index.js +0 -1037
- package/dist/queue/index.js.map +0 -1
- package/dist/queue-redis/index.d.ts +0 -82
- package/dist/queue-redis/index.js +0 -872
- package/dist/queue-redis/index.js.map +0 -1
- package/dist/server/index.browser.js.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server-auth/index.browser.js.map +0 -1
- package/dist/server-auth/index.js +0 -1943
- package/dist/server-auth/index.js.map +0 -1
- package/dist/server-cache/index.js.map +0 -1
- package/dist/server-compress/index.js.map +0 -1
- package/dist/server-cookies/index.browser.js.map +0 -1
- package/dist/server-cookies/index.js.map +0 -1
- package/dist/server-cors/index.js.map +0 -1
- package/dist/server-health/index.js.map +0 -1
- package/dist/server-helmet/index.js.map +0 -1
- package/dist/server-links/index.browser.js.map +0 -1
- package/dist/server-links/index.js.map +0 -1
- package/dist/server-metrics/index.js +0 -4532
- package/dist/server-metrics/index.js.map +0 -1
- package/dist/server-multipart/index.js.map +0 -1
- package/dist/server-proxy/index.js.map +0 -1
- package/dist/server-rate-limit/index.js.map +0 -1
- package/dist/server-security/index.browser.js.map +0 -1
- package/dist/server-security/index.js.map +0 -1
- package/dist/server-static/index.js.map +0 -1
- package/dist/server-swagger/index.js.map +0 -1
- package/dist/topic/index.js.map +0 -1
- package/dist/topic-redis/index.js.map +0 -1
- package/src/api-parameters/controllers/ParameterController.ts +0 -45
- package/src/api-parameters/entities/parameters.ts +0 -30
- package/src/api-parameters/index.ts +0 -21
- package/src/api-parameters/primitives/$config.ts +0 -79
- package/src/api-parameters/services/ParameterStore.ts +0 -23
- package/src/queue/interfaces/QueueJob.ts +0 -459
- package/src/queue/providers/MemoryQueueProvider.ts +0 -850
- package/src/queue/providers/QueueProvider.ts +0 -319
- package/src/queue/providers/WorkerProvider.ts +0 -344
- package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
- /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
- /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
- /package/src/{api-files → api/files}/entities/files.ts +0 -0
- /package/src/{api-files → api/files}/index.browser.ts +0 -0
- /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
- /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
- /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
- /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
- /package/src/{api-files → api/files}/services/FileService.ts +0 -0
- /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
- /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
- /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
- /package/src/{api-jobs → api/jobs}/index.ts +0 -0
- /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
- /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
- /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
- /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
- /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
- /package/src/{api-notifications → api/notifications}/index.ts +0 -0
- /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
- /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
- /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
- /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
- /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
- /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
- /package/src/{api-users → api/users}/entities/identities.ts +0 -0
- /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
- /package/src/{api-users → api/users}/entities/users.ts +0 -0
- /package/src/{api-users → api/users}/index.browser.ts +0 -0
- /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
- /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
- /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
- /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
- /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
- /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
- /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
- /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
- /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
- /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
- /package/src/cache/{index.ts → core/index.ts} +0 -0
- /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
- /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
- /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
- /package/src/{cache-redis → cache/redis}/index.ts +0 -0
- /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
- /package/src/lock/{index.ts → core/index.ts} +0 -0
- /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
- /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
- /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
- /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
- /package/src/{lock-redis → lock/redis}/index.ts +0 -0
- /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
- /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
- /package/src/{queue-redis → queue/redis}/index.ts +0 -0
- /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
- /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
- /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
- /package/src/{server-auth → server/auth}/index.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
- /package/src/{server-cache → server/cache}/index.ts +0 -0
- /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
- /package/src/{server-compress → server/compress}/index.ts +0 -0
- /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
- /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
- /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
- /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
- /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
- /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
- /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
- /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
- /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
- /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
- /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
- /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
- /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
- /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
- /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
- /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
- /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
- /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
- /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
- /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
- /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
- /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
- /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
- /package/src/server/{services → core/services}/HttpClient.ts +0 -0
- /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
- /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
- /package/src/{server-cors → server/cors}/index.ts +0 -0
- /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
- /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
- /package/src/{server-health → server/health}/index.ts +0 -0
- /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
- /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
- /package/src/{server-helmet → server/helmet}/index.ts +0 -0
- /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
- /package/src/{server-links → server/links}/index.browser.ts +0 -0
- /package/src/{server-links → server/links}/index.ts +0 -0
- /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
- /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
- /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
- /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
- /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
- /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
- /package/src/{server-metrics → server/metrics}/index.ts +0 -0
- /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
- /package/src/{server-multipart → server/multipart}/index.ts +0 -0
- /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
- /package/src/{server-proxy → server/proxy}/index.ts +0 -0
- /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
- /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
- /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
- /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
- /package/src/{server-security → server/security}/index.browser.ts +0 -0
- /package/src/{server-security → server/security}/index.ts +0 -0
- /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
- /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
- /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
- /package/src/{server-static → server/static}/index.ts +0 -0
- /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
- /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
- /package/src/{server-swagger → server/swagger}/index.ts +0 -0
- /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
- /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
- /package/src/topic/{index.ts → core/index.ts} +0 -0
- /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
- /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
- /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
- /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
- /package/src/{topic-redis → topic/redis}/index.ts +0 -0
- /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
|
@@ -5,7 +5,6 @@ import { AlephaEmail } from "alepha/email";
|
|
|
5
5
|
import { $entity, $repository, pageQuerySchema, parseQueryString, pg } from "alepha/orm";
|
|
6
6
|
import { $action, BadRequestError, ConflictError, HttpError, UnauthorizedError, okSchema } from "alepha/server";
|
|
7
7
|
import { $logger } from "alepha/logger";
|
|
8
|
-
import { DEFAULT_USER_REALM_NAME as DEFAULT_USER_REALM_NAME$1, realmAuthSettingsAtom as realmAuthSettingsAtom$1 } from "alepha/api/users";
|
|
9
8
|
import { $bucket } from "alepha/bucket";
|
|
10
9
|
import { randomInt, randomUUID } from "node:crypto";
|
|
11
10
|
import { $cache } from "alepha/cache";
|
|
@@ -14,16 +13,18 @@ import { $realm, CryptoProvider, InvalidCredentialsError, SecurityProvider } fro
|
|
|
14
13
|
import { $client } from "alepha/server/links";
|
|
15
14
|
import { $authCredentials, $authGithub, $authGoogle, ServerAuthProvider, authenticationProviderSchema } from "alepha/server/auth";
|
|
16
15
|
import { FileSystemProvider } from "alepha/file";
|
|
16
|
+
import { AlephaApiAudits } from "alepha/api/audits";
|
|
17
17
|
import { AlephaApiFiles } from "alepha/api/files";
|
|
18
|
+
import { AlephaApiJobs } from "alepha/api/jobs";
|
|
18
19
|
|
|
19
|
-
//#region ../../src/api
|
|
20
|
+
//#region ../../src/api/users/schemas/identityQuerySchema.ts
|
|
20
21
|
const identityQuerySchema = t.extend(pageQuerySchema, {
|
|
21
22
|
userId: t.optional(t.uuid()),
|
|
22
23
|
provider: t.optional(t.string())
|
|
23
24
|
});
|
|
24
25
|
|
|
25
26
|
//#endregion
|
|
26
|
-
//#region ../../src/api
|
|
27
|
+
//#region ../../src/api/users/entities/users.ts
|
|
27
28
|
const DEFAULT_USER_REALM_NAME = "default";
|
|
28
29
|
const users = $entity({
|
|
29
30
|
name: "users",
|
|
@@ -64,7 +65,7 @@ const users = $entity({
|
|
|
64
65
|
});
|
|
65
66
|
|
|
66
67
|
//#endregion
|
|
67
|
-
//#region ../../src/api
|
|
68
|
+
//#region ../../src/api/users/entities/identities.ts
|
|
68
69
|
const identities = $entity({
|
|
69
70
|
name: "identities",
|
|
70
71
|
schema: t.object({
|
|
@@ -81,11 +82,66 @@ const identities = $entity({
|
|
|
81
82
|
});
|
|
82
83
|
|
|
83
84
|
//#endregion
|
|
84
|
-
//#region ../../src/api
|
|
85
|
+
//#region ../../src/api/users/schemas/identityResourceSchema.ts
|
|
85
86
|
const identityResourceSchema = t.omit(identities.schema, ["password"]);
|
|
86
87
|
|
|
87
88
|
//#endregion
|
|
88
|
-
//#region ../../src/api
|
|
89
|
+
//#region ../../src/api/users/atoms/realmAuthSettingsAtom.ts
|
|
90
|
+
const realmAuthSettingsAtom = $atom({
|
|
91
|
+
name: "alepha.api.users.realmAuthSettings",
|
|
92
|
+
schema: t.object({
|
|
93
|
+
displayName: t.optional(t.string({ description: "Display name shown on auth pages (e.g., 'Customer Portal')" })),
|
|
94
|
+
description: t.optional(t.string({ description: "Description shown on auth pages" })),
|
|
95
|
+
logoUrl: t.optional(t.string({ description: "Logo URL for auth pages" })),
|
|
96
|
+
registrationAllowed: t.boolean({ description: "Enable user self-registration" }),
|
|
97
|
+
emailEnabled: t.boolean({ description: "Enable email address as a login/registration credential" }),
|
|
98
|
+
emailRequired: t.boolean({ description: "Require email address for user accounts" }),
|
|
99
|
+
usernameEnabled: t.boolean({ description: "Enable username as a login/registration credential" }),
|
|
100
|
+
usernameRequired: t.boolean({ description: "Require username for user accounts" }),
|
|
101
|
+
phoneEnabled: t.boolean({ description: "Enable phone number as a login/registration credential" }),
|
|
102
|
+
phoneRequired: t.boolean({ description: "Require phone number for user accounts" }),
|
|
103
|
+
verifyEmailRequired: t.boolean({ description: "Require email verification for user accounts" }),
|
|
104
|
+
verifyPhoneRequired: t.boolean({ description: "Require phone verification for user accounts" }),
|
|
105
|
+
firstNameLastNameEnabled: t.boolean({ description: "Enable first and last name for user accounts" }),
|
|
106
|
+
firstNameLastNameRequired: t.boolean({ description: "Require first and last name for user accounts" }),
|
|
107
|
+
resetPasswordAllowed: t.boolean({ description: "Enable forgot password functionality" }),
|
|
108
|
+
passwordPolicy: t.object({
|
|
109
|
+
minLength: t.integer({
|
|
110
|
+
description: "Minimum password length",
|
|
111
|
+
default: 8,
|
|
112
|
+
minimum: 1
|
|
113
|
+
}),
|
|
114
|
+
requireUppercase: t.boolean({ description: "Require at least one uppercase letter" }),
|
|
115
|
+
requireLowercase: t.boolean({ description: "Require at least one lowercase letter" }),
|
|
116
|
+
requireNumbers: t.boolean({ description: "Require at least one number" }),
|
|
117
|
+
requireSpecialCharacters: t.boolean({ description: "Require at least one special character" })
|
|
118
|
+
})
|
|
119
|
+
}),
|
|
120
|
+
default: {
|
|
121
|
+
registrationAllowed: true,
|
|
122
|
+
emailEnabled: true,
|
|
123
|
+
emailRequired: true,
|
|
124
|
+
usernameEnabled: false,
|
|
125
|
+
usernameRequired: false,
|
|
126
|
+
phoneEnabled: false,
|
|
127
|
+
phoneRequired: false,
|
|
128
|
+
verifyEmailRequired: false,
|
|
129
|
+
verifyPhoneRequired: false,
|
|
130
|
+
resetPasswordAllowed: false,
|
|
131
|
+
firstNameLastNameEnabled: false,
|
|
132
|
+
firstNameLastNameRequired: false,
|
|
133
|
+
passwordPolicy: {
|
|
134
|
+
minLength: 8,
|
|
135
|
+
requireUppercase: true,
|
|
136
|
+
requireLowercase: true,
|
|
137
|
+
requireNumbers: true,
|
|
138
|
+
requireSpecialCharacters: false
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region ../../src/api/users/entities/sessions.ts
|
|
89
145
|
const sessions = $entity({
|
|
90
146
|
name: "sessions",
|
|
91
147
|
schema: t.object({
|
|
@@ -110,7 +166,7 @@ const sessions = $entity({
|
|
|
110
166
|
});
|
|
111
167
|
|
|
112
168
|
//#endregion
|
|
113
|
-
//#region ../../src/api
|
|
169
|
+
//#region ../../src/api/users/providers/UserRealmProvider.ts
|
|
114
170
|
var UserRealmProvider = class {
|
|
115
171
|
alepha = $inject(Alepha);
|
|
116
172
|
defaultIdentities = $repository(identities);
|
|
@@ -145,10 +201,10 @@ var UserRealmProvider = class {
|
|
|
145
201
|
users: userRealmOptions.entities?.users ?? this.defaultUsers
|
|
146
202
|
},
|
|
147
203
|
settings: {
|
|
148
|
-
...realmAuthSettingsAtom
|
|
204
|
+
...realmAuthSettingsAtom.options.default,
|
|
149
205
|
...userRealmOptions.settings,
|
|
150
206
|
passwordPolicy: {
|
|
151
|
-
...realmAuthSettingsAtom
|
|
207
|
+
...realmAuthSettingsAtom.options.default.passwordPolicy,
|
|
152
208
|
...userRealmOptions.settings?.passwordPolicy
|
|
153
209
|
}
|
|
154
210
|
}
|
|
@@ -158,27 +214,29 @@ var UserRealmProvider = class {
|
|
|
158
214
|
/**
|
|
159
215
|
* Gets a registered realm by name, auto-creating default if needed.
|
|
160
216
|
*/
|
|
161
|
-
getRealm(userRealmName = DEFAULT_USER_REALM_NAME
|
|
217
|
+
getRealm(userRealmName = DEFAULT_USER_REALM_NAME) {
|
|
162
218
|
let realm = this.realms.get(userRealmName);
|
|
163
|
-
if (!realm)
|
|
164
|
-
this.
|
|
165
|
-
realm =
|
|
166
|
-
|
|
219
|
+
if (!realm) {
|
|
220
|
+
const firstRealm = Array.from(this.realms.values())[0];
|
|
221
|
+
if (userRealmName === DEFAULT_USER_REALM_NAME && firstRealm) realm = firstRealm;
|
|
222
|
+
else if (this.alepha.isTest()) realm = this.register(userRealmName);
|
|
223
|
+
else throw new AlephaError(`Missing user realm '${userRealmName}', please declare $userRealm in your application.`);
|
|
224
|
+
}
|
|
167
225
|
return realm;
|
|
168
226
|
}
|
|
169
|
-
identityRepository(userRealmName = DEFAULT_USER_REALM_NAME
|
|
227
|
+
identityRepository(userRealmName = DEFAULT_USER_REALM_NAME) {
|
|
170
228
|
return this.getRealm(userRealmName).repositories.identities;
|
|
171
229
|
}
|
|
172
|
-
sessionRepository(userRealmName = DEFAULT_USER_REALM_NAME
|
|
230
|
+
sessionRepository(userRealmName = DEFAULT_USER_REALM_NAME) {
|
|
173
231
|
return this.getRealm(userRealmName).repositories.sessions;
|
|
174
232
|
}
|
|
175
|
-
userRepository(userRealmName = DEFAULT_USER_REALM_NAME
|
|
233
|
+
userRepository(userRealmName = DEFAULT_USER_REALM_NAME) {
|
|
176
234
|
return this.getRealm(userRealmName).repositories.users;
|
|
177
235
|
}
|
|
178
236
|
};
|
|
179
237
|
|
|
180
238
|
//#endregion
|
|
181
|
-
//#region ../../src/api
|
|
239
|
+
//#region ../../src/api/users/services/IdentityService.ts
|
|
182
240
|
var IdentityService = class {
|
|
183
241
|
log = $logger();
|
|
184
242
|
userRealmProvider = $inject(UserRealmProvider);
|
|
@@ -239,7 +297,7 @@ var IdentityService = class {
|
|
|
239
297
|
};
|
|
240
298
|
|
|
241
299
|
//#endregion
|
|
242
|
-
//#region ../../src/api
|
|
300
|
+
//#region ../../src/api/users/controllers/IdentityController.ts
|
|
243
301
|
var IdentityController = class {
|
|
244
302
|
url = "/identities";
|
|
245
303
|
group = "identities";
|
|
@@ -298,11 +356,11 @@ var IdentityController = class {
|
|
|
298
356
|
};
|
|
299
357
|
|
|
300
358
|
//#endregion
|
|
301
|
-
//#region ../../src/api
|
|
359
|
+
//#region ../../src/api/users/schemas/sessionQuerySchema.ts
|
|
302
360
|
const sessionQuerySchema = t.extend(pageQuerySchema, { userId: t.optional(t.uuid()) });
|
|
303
361
|
|
|
304
362
|
//#endregion
|
|
305
|
-
//#region ../../src/api
|
|
363
|
+
//#region ../../src/api/users/schemas/sessionResourceSchema.ts
|
|
306
364
|
const sessionResourceSchema = t.object({
|
|
307
365
|
id: t.uuid(),
|
|
308
366
|
version: t.number(),
|
|
@@ -324,7 +382,7 @@ const sessionResourceSchema = t.object({
|
|
|
324
382
|
});
|
|
325
383
|
|
|
326
384
|
//#endregion
|
|
327
|
-
//#region ../../src/api
|
|
385
|
+
//#region ../../src/api/users/services/SessionCrudService.ts
|
|
328
386
|
var SessionCrudService = class {
|
|
329
387
|
log = $logger();
|
|
330
388
|
userRealmProvider = $inject(UserRealmProvider);
|
|
@@ -379,7 +437,7 @@ var SessionCrudService = class {
|
|
|
379
437
|
};
|
|
380
438
|
|
|
381
439
|
//#endregion
|
|
382
|
-
//#region ../../src/api
|
|
440
|
+
//#region ../../src/api/users/controllers/SessionController.ts
|
|
383
441
|
var SessionController = class {
|
|
384
442
|
url = "/sessions";
|
|
385
443
|
group = "sessions";
|
|
@@ -438,7 +496,7 @@ var SessionController = class {
|
|
|
438
496
|
};
|
|
439
497
|
|
|
440
498
|
//#endregion
|
|
441
|
-
//#region ../../src/api
|
|
499
|
+
//#region ../../src/api/users/schemas/completePasswordResetRequestSchema.ts
|
|
442
500
|
/**
|
|
443
501
|
* Request schema for completing a password reset.
|
|
444
502
|
*
|
|
@@ -455,7 +513,7 @@ const completePasswordResetRequestSchema = t.object({
|
|
|
455
513
|
});
|
|
456
514
|
|
|
457
515
|
//#endregion
|
|
458
|
-
//#region ../../src/api
|
|
516
|
+
//#region ../../src/api/users/schemas/completeRegistrationRequestSchema.ts
|
|
459
517
|
const completeRegistrationRequestSchema = t.object({
|
|
460
518
|
intentId: t.uuid({ description: "The registration intent ID from the first phase" }),
|
|
461
519
|
emailCode: t.optional(t.string({ description: "Email verification code (if email verification required)" })),
|
|
@@ -464,11 +522,11 @@ const completeRegistrationRequestSchema = t.object({
|
|
|
464
522
|
});
|
|
465
523
|
|
|
466
524
|
//#endregion
|
|
467
|
-
//#region ../../src/api
|
|
525
|
+
//#region ../../src/api/users/schemas/createUserSchema.ts
|
|
468
526
|
const createUserSchema = t.omit(users.insertSchema, ["realm"]);
|
|
469
527
|
|
|
470
528
|
//#endregion
|
|
471
|
-
//#region ../../src/api
|
|
529
|
+
//#region ../../src/api/users/schemas/passwordResetIntentResponseSchema.ts
|
|
472
530
|
/**
|
|
473
531
|
* Response schema for password reset intent creation.
|
|
474
532
|
*
|
|
@@ -481,7 +539,7 @@ const passwordResetIntentResponseSchema = t.object({
|
|
|
481
539
|
});
|
|
482
540
|
|
|
483
541
|
//#endregion
|
|
484
|
-
//#region ../../src/api
|
|
542
|
+
//#region ../../src/api/users/schemas/registerQuerySchema.ts
|
|
485
543
|
/**
|
|
486
544
|
* Schema for user registration query parameters.
|
|
487
545
|
* Allows specifying a custom user realm.
|
|
@@ -489,7 +547,7 @@ const passwordResetIntentResponseSchema = t.object({
|
|
|
489
547
|
const registerQuerySchema = t.object({ userRealmName: t.optional(t.text({ description: "The user realm to register the user in (defaults to 'default')" })) });
|
|
490
548
|
|
|
491
549
|
//#endregion
|
|
492
|
-
//#region ../../src/api
|
|
550
|
+
//#region ../../src/api/users/schemas/registerRequestSchema.ts
|
|
493
551
|
/**
|
|
494
552
|
* Schema for user registration request body.
|
|
495
553
|
* Password is always required, other fields depend on realm settings.
|
|
@@ -514,7 +572,7 @@ const registerRequestSchema = t.object({
|
|
|
514
572
|
});
|
|
515
573
|
|
|
516
574
|
//#endregion
|
|
517
|
-
//#region ../../src/api
|
|
575
|
+
//#region ../../src/api/users/schemas/registrationIntentResponseSchema.ts
|
|
518
576
|
const registrationIntentResponseSchema = t.object({
|
|
519
577
|
intentId: t.uuid({ description: "Unique identifier for the registration intent" }),
|
|
520
578
|
expectCaptcha: t.boolean({ description: "Whether captcha verification is required" }),
|
|
@@ -524,7 +582,7 @@ const registrationIntentResponseSchema = t.object({
|
|
|
524
582
|
});
|
|
525
583
|
|
|
526
584
|
//#endregion
|
|
527
|
-
//#region ../../src/api
|
|
585
|
+
//#region ../../src/api/users/schemas/updateUserSchema.ts
|
|
528
586
|
const updateUserSchema = t.partial(t.omit(users.insertSchema, [
|
|
529
587
|
"id",
|
|
530
588
|
"version",
|
|
@@ -535,7 +593,7 @@ const updateUserSchema = t.partial(t.omit(users.insertSchema, [
|
|
|
535
593
|
]));
|
|
536
594
|
|
|
537
595
|
//#endregion
|
|
538
|
-
//#region ../../src/api
|
|
596
|
+
//#region ../../src/api/users/schemas/userQuerySchema.ts
|
|
539
597
|
const userQuerySchema = t.extend(pageQuerySchema, {
|
|
540
598
|
email: t.optional(t.string()),
|
|
541
599
|
enabled: t.optional(t.boolean()),
|
|
@@ -545,11 +603,11 @@ const userQuerySchema = t.extend(pageQuerySchema, {
|
|
|
545
603
|
});
|
|
546
604
|
|
|
547
605
|
//#endregion
|
|
548
|
-
//#region ../../src/api
|
|
606
|
+
//#region ../../src/api/users/schemas/userResourceSchema.ts
|
|
549
607
|
const userResourceSchema = users.schema;
|
|
550
608
|
|
|
551
609
|
//#endregion
|
|
552
|
-
//#region ../../src/api
|
|
610
|
+
//#region ../../src/api/users/notifications/UserNotifications.ts
|
|
553
611
|
var UserNotifications = class {
|
|
554
612
|
passwordReset = $notification({
|
|
555
613
|
category: "security",
|
|
@@ -678,7 +736,7 @@ var UserNotifications = class {
|
|
|
678
736
|
};
|
|
679
737
|
|
|
680
738
|
//#endregion
|
|
681
|
-
//#region ../../src/api
|
|
739
|
+
//#region ../../src/api/users/services/CredentialService.ts
|
|
682
740
|
const INTENT_TTL_MINUTES$1 = 10;
|
|
683
741
|
var CredentialService = class {
|
|
684
742
|
log = $logger();
|
|
@@ -861,7 +919,7 @@ var CredentialService = class {
|
|
|
861
919
|
};
|
|
862
920
|
|
|
863
921
|
//#endregion
|
|
864
|
-
//#region ../../src/api
|
|
922
|
+
//#region ../../src/api/users/services/RegistrationService.ts
|
|
865
923
|
const INTENT_TTL_MINUTES = 10;
|
|
866
924
|
var RegistrationService = class {
|
|
867
925
|
log = $logger();
|
|
@@ -990,6 +1048,7 @@ var RegistrationService = class {
|
|
|
990
1048
|
}, userRealmName);
|
|
991
1049
|
await this.intentCache.invalidate(body.intentId);
|
|
992
1050
|
const user = await userRepository.create({
|
|
1051
|
+
realm: userRealmName,
|
|
993
1052
|
username: intent.data.username,
|
|
994
1053
|
email: intent.data.email,
|
|
995
1054
|
phoneNumber: intent.data.phoneNumber,
|
|
@@ -1056,10 +1115,7 @@ var RegistrationService = class {
|
|
|
1056
1115
|
});
|
|
1057
1116
|
this.log.debug("Email verification code sent", { email });
|
|
1058
1117
|
} catch (error) {
|
|
1059
|
-
this.log.warn("Failed to send email verification code",
|
|
1060
|
-
email,
|
|
1061
|
-
error
|
|
1062
|
-
});
|
|
1118
|
+
this.log.warn("Failed to send email verification code", error);
|
|
1063
1119
|
}
|
|
1064
1120
|
}
|
|
1065
1121
|
/**
|
|
@@ -1127,7 +1183,7 @@ var RegistrationService = class {
|
|
|
1127
1183
|
};
|
|
1128
1184
|
|
|
1129
1185
|
//#endregion
|
|
1130
|
-
//#region ../../src/api
|
|
1186
|
+
//#region ../../src/api/users/services/UserService.ts
|
|
1131
1187
|
var UserService = class {
|
|
1132
1188
|
log = $logger();
|
|
1133
1189
|
verificationController = $client();
|
|
@@ -1290,6 +1346,7 @@ var UserService = class {
|
|
|
1290
1346
|
email: data.email,
|
|
1291
1347
|
userRealmName
|
|
1292
1348
|
});
|
|
1349
|
+
const realm = this.userRealmProvider.getRealm(userRealmName);
|
|
1293
1350
|
if (data.username) {
|
|
1294
1351
|
if (await this.users(userRealmName).findOne({ where: { username: { eq: data.username } } }).catch(() => void 0)) {
|
|
1295
1352
|
this.log.debug("Username already taken", { username: data.username });
|
|
@@ -1310,7 +1367,8 @@ var UserService = class {
|
|
|
1310
1367
|
}
|
|
1311
1368
|
const user = await this.users(userRealmName).create({
|
|
1312
1369
|
...data,
|
|
1313
|
-
roles: data.roles ?? ["user"]
|
|
1370
|
+
roles: data.roles ?? ["user"],
|
|
1371
|
+
realm: realm.name
|
|
1314
1372
|
});
|
|
1315
1373
|
this.log.info("User created", {
|
|
1316
1374
|
userId: user.id,
|
|
@@ -1347,7 +1405,7 @@ var UserService = class {
|
|
|
1347
1405
|
};
|
|
1348
1406
|
|
|
1349
1407
|
//#endregion
|
|
1350
|
-
//#region ../../src/api
|
|
1408
|
+
//#region ../../src/api/users/controllers/UserController.ts
|
|
1351
1409
|
var UserController = class {
|
|
1352
1410
|
url = "/users";
|
|
1353
1411
|
group = "users";
|
|
@@ -1652,59 +1710,7 @@ var UserController = class {
|
|
|
1652
1710
|
};
|
|
1653
1711
|
|
|
1654
1712
|
//#endregion
|
|
1655
|
-
//#region ../../src/api
|
|
1656
|
-
const realmAuthSettingsAtom = $atom({
|
|
1657
|
-
name: "alepha.api.users.realmAuthSettings",
|
|
1658
|
-
schema: t.object({
|
|
1659
|
-
registrationAllowed: t.boolean({ description: "Enable user self-registration" }),
|
|
1660
|
-
emailEnabled: t.boolean({ description: "Enable email address as a login/registration credential" }),
|
|
1661
|
-
emailRequired: t.boolean({ description: "Require email address for user accounts" }),
|
|
1662
|
-
usernameEnabled: t.boolean({ description: "Enable username as a login/registration credential" }),
|
|
1663
|
-
usernameRequired: t.boolean({ description: "Require username for user accounts" }),
|
|
1664
|
-
phoneEnabled: t.boolean({ description: "Enable phone number as a login/registration credential" }),
|
|
1665
|
-
phoneRequired: t.boolean({ description: "Require phone number for user accounts" }),
|
|
1666
|
-
verifyEmailRequired: t.boolean({ description: "Require email verification for user accounts" }),
|
|
1667
|
-
verifyPhoneRequired: t.boolean({ description: "Require phone verification for user accounts" }),
|
|
1668
|
-
firstNameLastNameEnabled: t.boolean({ description: "Enable first and last name for user accounts" }),
|
|
1669
|
-
firstNameLastNameRequired: t.boolean({ description: "Require first and last name for user accounts" }),
|
|
1670
|
-
resetPasswordAllowed: t.boolean({ description: "Enable forgot password functionality" }),
|
|
1671
|
-
passwordPolicy: t.object({
|
|
1672
|
-
minLength: t.integer({
|
|
1673
|
-
description: "Minimum password length",
|
|
1674
|
-
default: 8,
|
|
1675
|
-
minimum: 1
|
|
1676
|
-
}),
|
|
1677
|
-
requireUppercase: t.boolean({ description: "Require at least one uppercase letter" }),
|
|
1678
|
-
requireLowercase: t.boolean({ description: "Require at least one lowercase letter" }),
|
|
1679
|
-
requireNumbers: t.boolean({ description: "Require at least one number" }),
|
|
1680
|
-
requireSpecialCharacters: t.boolean({ description: "Require at least one special character" })
|
|
1681
|
-
})
|
|
1682
|
-
}),
|
|
1683
|
-
default: {
|
|
1684
|
-
registrationAllowed: true,
|
|
1685
|
-
emailEnabled: true,
|
|
1686
|
-
emailRequired: true,
|
|
1687
|
-
usernameEnabled: false,
|
|
1688
|
-
usernameRequired: false,
|
|
1689
|
-
phoneEnabled: false,
|
|
1690
|
-
phoneRequired: false,
|
|
1691
|
-
verifyEmailRequired: false,
|
|
1692
|
-
verifyPhoneRequired: false,
|
|
1693
|
-
resetPasswordAllowed: false,
|
|
1694
|
-
firstNameLastNameEnabled: false,
|
|
1695
|
-
firstNameLastNameRequired: false,
|
|
1696
|
-
passwordPolicy: {
|
|
1697
|
-
minLength: 8,
|
|
1698
|
-
requireUppercase: true,
|
|
1699
|
-
requireLowercase: true,
|
|
1700
|
-
requireNumbers: true,
|
|
1701
|
-
requireSpecialCharacters: false
|
|
1702
|
-
}
|
|
1703
|
-
}
|
|
1704
|
-
});
|
|
1705
|
-
|
|
1706
|
-
//#endregion
|
|
1707
|
-
//#region ../../src/api-users/schemas/userRealmConfigSchema.ts
|
|
1713
|
+
//#region ../../src/api/users/schemas/userRealmConfigSchema.ts
|
|
1708
1714
|
const userRealmConfigSchema = t.object({
|
|
1709
1715
|
settings: realmAuthSettingsAtom.schema,
|
|
1710
1716
|
realmName: t.string(),
|
|
@@ -1712,7 +1718,7 @@ const userRealmConfigSchema = t.object({
|
|
|
1712
1718
|
});
|
|
1713
1719
|
|
|
1714
1720
|
//#endregion
|
|
1715
|
-
//#region ../../src/api
|
|
1721
|
+
//#region ../../src/api/users/controllers/UserRealmController.ts
|
|
1716
1722
|
/**
|
|
1717
1723
|
* Controller for exposing realm configuration.
|
|
1718
1724
|
* Uses $route instead of $action to keep endpoints hidden from API documentation.
|
|
@@ -1721,7 +1727,6 @@ var UserRealmController = class {
|
|
|
1721
1727
|
url = "/realms";
|
|
1722
1728
|
userRealmProvider = $inject(UserRealmProvider);
|
|
1723
1729
|
serverAuthProvider = $inject(ServerAuthProvider);
|
|
1724
|
-
cryptoProvider = $inject(CryptoProvider);
|
|
1725
1730
|
/**
|
|
1726
1731
|
* Get realm configuration settings.
|
|
1727
1732
|
* This endpoint is not exposed in the API documentation.
|
|
@@ -1763,7 +1768,7 @@ var UserRealmController = class {
|
|
|
1763
1768
|
};
|
|
1764
1769
|
|
|
1765
1770
|
//#endregion
|
|
1766
|
-
//#region ../../src/api
|
|
1771
|
+
//#region ../../src/api/users/services/SessionService.ts
|
|
1767
1772
|
var SessionService = class {
|
|
1768
1773
|
alepha = $inject(Alepha);
|
|
1769
1774
|
fsp = $inject(FileSystemProvider);
|
|
@@ -1808,7 +1813,8 @@ var SessionService = class {
|
|
|
1808
1813
|
else {
|
|
1809
1814
|
this.log.warn("Invalid login identifier format", {
|
|
1810
1815
|
provider,
|
|
1811
|
-
username
|
|
1816
|
+
username,
|
|
1817
|
+
realm: name
|
|
1812
1818
|
});
|
|
1813
1819
|
throw new InvalidCredentialsError();
|
|
1814
1820
|
}
|
|
@@ -1816,7 +1822,8 @@ var SessionService = class {
|
|
|
1816
1822
|
if (!user) {
|
|
1817
1823
|
this.log.warn("User not found during login attempt", {
|
|
1818
1824
|
provider,
|
|
1819
|
-
username
|
|
1825
|
+
username,
|
|
1826
|
+
realm: name
|
|
1820
1827
|
});
|
|
1821
1828
|
throw new InvalidCredentialsError();
|
|
1822
1829
|
}
|
|
@@ -1829,14 +1836,16 @@ var SessionService = class {
|
|
|
1829
1836
|
this.log.error("Identity has no password configured", {
|
|
1830
1837
|
provider,
|
|
1831
1838
|
username,
|
|
1832
|
-
identityId: identity.id
|
|
1839
|
+
identityId: identity.id,
|
|
1840
|
+
realm: name
|
|
1833
1841
|
});
|
|
1834
1842
|
throw new InvalidCredentialsError();
|
|
1835
1843
|
}
|
|
1836
1844
|
if (!await this.cryptoProvider.verifyPassword(password, storedPassword)) {
|
|
1837
1845
|
this.log.warn("Invalid password during login attempt", {
|
|
1838
1846
|
provider,
|
|
1839
|
-
username
|
|
1847
|
+
username,
|
|
1848
|
+
realm: name
|
|
1840
1849
|
});
|
|
1841
1850
|
throw new InvalidCredentialsError();
|
|
1842
1851
|
}
|
|
@@ -1986,7 +1995,7 @@ var SessionService = class {
|
|
|
1986
1995
|
};
|
|
1987
1996
|
|
|
1988
1997
|
//#endregion
|
|
1989
|
-
//#region ../../src/api
|
|
1998
|
+
//#region ../../src/api/users/primitives/$userRealm.ts
|
|
1990
1999
|
/**
|
|
1991
2000
|
* Already configured realm for user management.
|
|
1992
2001
|
*
|
|
@@ -2007,8 +2016,9 @@ const $userRealm = (options = {}) => {
|
|
|
2007
2016
|
const userRealmProvider = alepha.inject(UserRealmProvider);
|
|
2008
2017
|
const name = options.realm?.name ?? DEFAULT_USER_REALM_NAME;
|
|
2009
2018
|
const userRealm = userRealmProvider.register(name, options);
|
|
2010
|
-
if (options.modules?.audits)
|
|
2019
|
+
if (options.modules?.audits) alepha.with(AlephaApiAudits);
|
|
2011
2020
|
if (options.modules?.files) alepha.with(AlephaApiFiles);
|
|
2021
|
+
if (options.modules?.jobs) alepha.with(AlephaApiJobs);
|
|
2012
2022
|
const realm = $realm({
|
|
2013
2023
|
...options.realm,
|
|
2014
2024
|
name,
|
|
@@ -2040,10 +2050,12 @@ const $userRealm = (options = {}) => {
|
|
|
2040
2050
|
}
|
|
2041
2051
|
});
|
|
2042
2052
|
realm.link = (name$1) => {
|
|
2043
|
-
return (ctx) => sessionService.link(name$1, ctx.user);
|
|
2053
|
+
return (ctx) => sessionService.link(name$1, ctx.user, realm.name);
|
|
2044
2054
|
};
|
|
2045
2055
|
realm.login = (name$1) => {
|
|
2046
|
-
return (credentials) =>
|
|
2056
|
+
return (credentials) => {
|
|
2057
|
+
return sessionService.login(name$1, credentials.username, credentials.password, realm.name);
|
|
2058
|
+
};
|
|
2047
2059
|
};
|
|
2048
2060
|
const identities$1 = options.identities ?? { credentials: true };
|
|
2049
2061
|
if (identities$1) {
|
|
@@ -2058,7 +2070,7 @@ const $userRealm = (options = {}) => {
|
|
|
2058
2070
|
};
|
|
2059
2071
|
|
|
2060
2072
|
//#endregion
|
|
2061
|
-
//#region ../../src/api
|
|
2073
|
+
//#region ../../src/api/users/schemas/loginSchema.ts
|
|
2062
2074
|
const loginSchema = t.object({
|
|
2063
2075
|
username: t.text({
|
|
2064
2076
|
minLength: 3,
|
|
@@ -2072,7 +2084,7 @@ const loginSchema = t.object({
|
|
|
2072
2084
|
});
|
|
2073
2085
|
|
|
2074
2086
|
//#endregion
|
|
2075
|
-
//#region ../../src/api
|
|
2087
|
+
//#region ../../src/api/users/schemas/registerSchema.ts
|
|
2076
2088
|
const registerSchema = t.object({
|
|
2077
2089
|
username: t.string({
|
|
2078
2090
|
minLength: 3,
|
|
@@ -2100,7 +2112,7 @@ const registerSchema = t.object({
|
|
|
2100
2112
|
});
|
|
2101
2113
|
|
|
2102
2114
|
//#endregion
|
|
2103
|
-
//#region ../../src/api
|
|
2115
|
+
//#region ../../src/api/users/schemas/resetPasswordSchema.ts
|
|
2104
2116
|
const resetPasswordRequestSchema = t.object({ email: t.email({ description: "Email address to send password reset link" }) });
|
|
2105
2117
|
const resetPasswordSchema = t.object({
|
|
2106
2118
|
token: t.string({ description: "Password reset token from email" }),
|
|
@@ -2115,7 +2127,7 @@ const resetPasswordSchema = t.object({
|
|
|
2115
2127
|
});
|
|
2116
2128
|
|
|
2117
2129
|
//#endregion
|
|
2118
|
-
//#region ../../src/api
|
|
2130
|
+
//#region ../../src/api/users/index.ts
|
|
2119
2131
|
/**
|
|
2120
2132
|
* Provides user management API endpoints for Alepha applications.
|
|
2121
2133
|
*
|
|
@@ -2140,7 +2152,8 @@ const AlephaApiUsers = $module({
|
|
|
2140
2152
|
UserController,
|
|
2141
2153
|
SessionController,
|
|
2142
2154
|
IdentityController,
|
|
2143
|
-
UserRealmController
|
|
2155
|
+
UserRealmController,
|
|
2156
|
+
UserNotifications
|
|
2144
2157
|
]
|
|
2145
2158
|
});
|
|
2146
2159
|
|