alepha 0.22.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
- package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
- package/dist/api/audits/index.browser.js +49 -52
- package/dist/api/audits/index.browser.js.map +1 -1
- package/dist/api/audits/index.d.ts +629 -565
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +206 -98
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.browser.js +44 -44
- package/dist/api/files/index.browser.js.map +1 -1
- package/dist/api/files/index.d.ts +292 -293
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +61 -64
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.browser.js +61 -59
- package/dist/api/jobs/index.browser.js.map +1 -1
- package/dist/api/jobs/index.d.ts +546 -347
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +165 -86
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +242 -230
- package/dist/api/keys/index.d.ts.map +1 -1
- package/dist/api/keys/index.js +63 -66
- package/dist/api/keys/index.js.map +1 -1
- package/dist/api/notifications/index.browser.js +40 -38
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +339 -209
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +108 -60
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/oauth/index.d.ts +190 -78
- package/dist/api/oauth/index.d.ts.map +1 -1
- package/dist/api/oauth/index.js +290 -68
- package/dist/api/oauth/index.js.map +1 -1
- package/dist/api/organizations/index.browser.js +14 -14
- package/dist/api/organizations/index.browser.js.map +1 -1
- package/dist/api/organizations/index.d.ts +158 -134
- package/dist/api/organizations/index.d.ts.map +1 -1
- package/dist/api/organizations/index.js +18 -18
- package/dist/api/organizations/index.js.map +1 -1
- package/dist/api/parameters/index.browser.js +74 -53
- package/dist/api/parameters/index.browser.js.map +1 -1
- package/dist/api/parameters/index.d.ts +607 -513
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +205 -127
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/payments/index.d.ts +652 -449
- package/dist/api/payments/index.d.ts.map +1 -1
- package/dist/api/payments/index.js +159 -93
- package/dist/api/payments/index.js.map +1 -1
- package/dist/api/subscriptions/index.d.ts +1032 -762
- package/dist/api/subscriptions/index.d.ts.map +1 -1
- package/dist/api/subscriptions/index.js +166 -185
- package/dist/api/subscriptions/index.js.map +1 -1
- package/dist/api/users/index.browser.js +48 -71
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +1297 -1109
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +454 -369
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.browser.js +17 -17
- package/dist/api/verifications/index.browser.js.map +1 -1
- package/dist/api/verifications/index.d.ts +169 -157
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js +47 -95
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/background/index.d.ts +0 -1
- package/dist/background/index.d.ts.map +1 -1
- package/dist/background/index.js.map +1 -1
- package/dist/background/index.workerd.js.map +1 -1
- package/dist/batch/index.d.ts +0 -1
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js.map +1 -1
- package/dist/bin/index.js +1 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/bucket/index.d.ts +27 -32
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +56 -26
- package/dist/bucket/index.js.map +1 -1
- package/dist/bucket/index.workerd.js +52 -24
- package/dist/bucket/index.workerd.js.map +1 -1
- package/dist/cache/core/index.d.ts +4 -6
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/core/index.js +4 -10
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cache/core/index.workerd.js +4 -10
- package/dist/cache/core/index.workerd.js.map +1 -1
- package/dist/cache/database/index.d.ts +22 -23
- package/dist/cache/database/index.d.ts.map +1 -1
- package/dist/cache/database/index.js +11 -20
- package/dist/cache/database/index.js.map +1 -1
- package/dist/cache/redis/index.d.ts +3 -4
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/captcha/index.d.ts.map +1 -1
- package/dist/captcha/index.js +4 -4
- package/dist/captcha/index.js.map +1 -1
- package/dist/cli/config/index.d.ts +0 -1
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/core/index.d.ts +244 -475
- package/dist/cli/core/index.d.ts.map +1 -1
- package/dist/cli/core/index.js +308 -383
- package/dist/cli/core/index.js.map +1 -1
- package/dist/cli/devtools/index.d.ts +3 -9
- package/dist/cli/devtools/index.d.ts.map +1 -1
- package/dist/cli/devtools/index.js +3 -3
- package/dist/cli/devtools/index.js.map +1 -1
- package/dist/cli/i18n/index.d.ts +20 -39
- package/dist/cli/i18n/index.d.ts.map +1 -1
- package/dist/cli/i18n/index.js +51 -17
- package/dist/cli/i18n/index.js.map +1 -1
- package/dist/cli/platform/index.d.ts +89 -82
- package/dist/cli/platform/index.d.ts.map +1 -1
- package/dist/cli/platform/index.js +27 -33
- package/dist/cli/platform/index.js.map +1 -1
- package/dist/cli/platform-lib/index.d.ts +383 -410
- package/dist/cli/platform-lib/index.d.ts.map +1 -1
- package/dist/cli/platform-lib/index.js +300 -258
- package/dist/cli/platform-lib/index.js.map +1 -1
- package/dist/cli/vendor/index.d.ts +17 -41
- package/dist/cli/vendor/index.d.ts.map +1 -1
- package/dist/cli/vendor/index.js +10 -13
- package/dist/cli/vendor/index.js.map +1 -1
- package/dist/command/index.d.ts +82 -194
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +160 -563
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +845 -859
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +787 -527
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +845 -859
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +845 -859
- package/dist/core/index.native.js.map +1 -1
- package/dist/core/index.workerd.js +845 -859
- package/dist/core/index.workerd.js.map +1 -1
- package/dist/crypto/index.browser.js +1 -1
- package/dist/crypto/index.browser.js.map +1 -1
- package/dist/crypto/index.d.ts +3 -4
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/crypto/index.js +6 -3
- package/dist/crypto/index.js.map +1 -1
- package/dist/datetime/index.d.ts +12 -2
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/datetime/index.js +6 -1
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/brevo/index.d.ts +0 -1
- package/dist/email/brevo/index.d.ts.map +1 -1
- package/dist/email/brevo/index.js +4 -4
- package/dist/email/brevo/index.js.map +1 -1
- package/dist/email/cloudflare/index.d.ts +0 -1
- package/dist/email/cloudflare/index.d.ts.map +1 -1
- package/dist/email/cloudflare/index.js +2 -2
- package/dist/email/cloudflare/index.js.map +1 -1
- package/dist/email/core/index.d.ts +15 -7
- package/dist/email/core/index.d.ts.map +1 -1
- package/dist/email/core/index.js +14 -5
- package/dist/email/core/index.js.map +1 -1
- package/dist/email/core/index.workerd.js +5 -1
- package/dist/email/core/index.workerd.js.map +1 -1
- package/dist/email/smtp/index.d.ts +8 -9
- package/dist/email/smtp/index.d.ts.map +1 -1
- package/dist/email/smtp/index.js +702 -479
- package/dist/email/smtp/index.js.map +1 -1
- package/dist/fake/index.d.ts +1580 -1238
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +11728 -32131
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +13 -9
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/core/index.js +5 -5
- package/dist/lock/core/index.js.map +1 -1
- package/dist/lock/redis/index.d.ts +0 -1
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/lock/redis/index.js.map +1 -1
- package/dist/logger/index.d.ts +81 -69
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +123 -56
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +36 -90
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +65 -70
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/core/index.browser.js +54 -40
- package/dist/orm/core/index.browser.js.map +1 -1
- package/dist/orm/core/index.bun.js +140 -106
- package/dist/orm/core/index.bun.js.map +1 -1
- package/dist/orm/core/index.d.ts +145 -150
- package/dist/orm/core/index.d.ts.map +1 -1
- package/dist/orm/core/index.js +144 -109
- package/dist/orm/core/index.js.map +1 -1
- package/dist/orm/postgres/index.bun.js +64 -54
- package/dist/orm/postgres/index.bun.js.map +1 -1
- package/dist/orm/postgres/index.d.ts +36 -76
- package/dist/orm/postgres/index.d.ts.map +1 -1
- package/dist/orm/postgres/index.js +67 -57
- package/dist/orm/postgres/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +62 -75
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/core/index.js +48 -71
- package/dist/queue/core/index.js.map +1 -1
- package/dist/queue/core/index.workerd.js +48 -71
- package/dist/queue/core/index.workerd.js.map +1 -1
- package/dist/queue/redis/index.d.ts +3 -4
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/queue/redis/index.js +2 -2
- package/dist/queue/redis/index.js.map +1 -1
- package/dist/react/auth/index.browser.js.map +1 -1
- package/dist/react/auth/index.d.ts +7 -4
- package/dist/react/auth/index.d.ts.map +1 -1
- package/dist/react/auth/index.js.map +1 -1
- package/dist/react/core/index.d.ts +87 -5
- package/dist/react/core/index.d.ts.map +1 -1
- package/dist/react/core/index.js +170 -23
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +4 -6
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/form/index.js +107 -71
- package/dist/react/form/index.js.map +1 -1
- package/dist/react/head/index.browser.js.map +1 -1
- package/dist/react/head/index.d.ts +0 -1
- package/dist/react/head/index.d.ts.map +1 -1
- package/dist/react/head/index.js.map +1 -1
- package/dist/react/i18n/index.d.ts +47 -5
- package/dist/react/i18n/index.d.ts.map +1 -1
- package/dist/react/i18n/index.js +116 -12
- package/dist/react/i18n/index.js.map +1 -1
- package/dist/react/intro/index.d.ts +1 -4
- package/dist/react/intro/index.d.ts.map +1 -1
- package/dist/react/intro/index.js.map +1 -1
- package/dist/react/router/index.browser.js +188 -29
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +480 -372
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +261 -47
- package/dist/react/router/index.js.map +1 -1
- package/dist/react/sitemap/index.browser.js +35 -0
- package/dist/react/sitemap/index.browser.js.map +1 -0
- package/dist/react/sitemap/index.d.ts +91 -0
- package/dist/react/sitemap/index.d.ts.map +1 -0
- package/dist/react/sitemap/index.js +131 -0
- package/dist/react/sitemap/index.js.map +1 -0
- package/dist/react/testing/index.d.ts +4 -5
- package/dist/react/testing/index.d.ts.map +1 -1
- package/dist/react/testing/index.js +41 -15
- package/dist/react/testing/index.js.map +1 -1
- package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
- package/dist/react/ui/index.d.ts +35 -34
- package/dist/react/ui/index.d.ts.map +1 -1
- package/dist/react/ui/index.js +12 -17
- package/dist/react/ui/index.js.map +1 -1
- package/dist/redis/index.bun.js +5 -5
- package/dist/redis/index.bun.js.map +1 -1
- package/dist/redis/index.d.ts +6 -7
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/redis/index.js +6 -6
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.d.ts +0 -1
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/retry/index.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +4 -12
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +9 -4
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/index.workerd.js +9 -4
- package/dist/scheduler/index.workerd.js.map +1 -1
- package/dist/security/index.browser.js +30 -28
- package/dist/security/index.browser.js.map +1 -1
- package/dist/security/index.d.ts +113 -44
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +452 -37
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.browser.js +19 -19
- package/dist/server/auth/index.browser.js.map +1 -1
- package/dist/server/auth/index.d.ts +215 -187
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1145 -86
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cookies/index.browser.js +103 -5
- package/dist/server/cookies/index.browser.js.map +1 -1
- package/dist/server/cookies/index.d.ts +86 -4
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +121 -8
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.browser.js +22 -27
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts +134 -85
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +130 -118
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +9 -10
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/cors/index.js +14 -26
- package/dist/server/cors/index.js.map +1 -1
- package/dist/server/etag/index.d.ts +2 -3
- package/dist/server/etag/index.d.ts.map +1 -1
- package/dist/server/etag/index.js.map +1 -1
- package/dist/server/health/index.d.ts +18 -19
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/health/index.js +6 -6
- package/dist/server/health/index.js.map +1 -1
- package/dist/server/links/index.browser.js +15 -18
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +66 -67
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +29 -32
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +0 -1
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +10 -3
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/proxy/index.d.ts +0 -1
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/proxy/index.js.map +1 -1
- package/dist/server/rate-limit/index.d.ts +8 -9
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.js +6 -12
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/static/index.d.ts +0 -1
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +4 -4
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +37 -25
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +0 -1
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.browser.js.map +1 -1
- package/dist/system/index.d.ts +0 -1
- package/dist/system/index.d.ts.map +1 -1
- package/dist/system/index.js +2 -1
- package/dist/system/index.js.map +1 -1
- package/dist/system/index.workerd.js.map +1 -1
- package/dist/topic/core/index.d.ts +19 -20
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/core/index.js +8 -8
- package/dist/topic/core/index.js.map +1 -1
- package/dist/topic/redis/index.d.ts +3 -4
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/topic/redis/index.js +2 -2
- package/dist/topic/redis/index.js.map +1 -1
- package/package.json +36 -36
- package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
- package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
- package/src/api/audits/controllers/AdminAuditController.ts +41 -41
- package/src/api/audits/entities/audits.ts +22 -22
- package/src/api/audits/index.ts +6 -1
- package/src/api/audits/jobs/AuditJobs.ts +29 -0
- package/src/api/audits/parameters/AuditParameters.ts +51 -0
- package/src/api/audits/primitives/$audit.ts +24 -0
- package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
- package/src/api/audits/schemas/createAuditSchema.ts +18 -18
- package/src/api/audits/services/AuditService.ts +79 -7
- package/src/api/files/__tests__/FileController.spec.ts +5 -5
- package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
- package/src/api/files/controllers/FileController.ts +25 -25
- package/src/api/files/entities/files.ts +15 -15
- package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
- package/src/api/files/schemas/fileQuerySchema.ts +9 -9
- package/src/api/files/schemas/fileResourceSchema.ts +7 -9
- package/src/api/files/schemas/storageStatsSchema.ts +13 -13
- package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
- package/src/api/jobs/__tests__/$job.spec.ts +18 -18
- package/src/api/jobs/controllers/AdminJobController.ts +8 -8
- package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
- package/src/api/jobs/providers/JobProvider.ts +128 -12
- package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
- package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
- package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
- package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
- package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
- package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
- package/src/api/jobs/services/JobService.ts +6 -6
- package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
- package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
- package/src/api/keys/entities/apiKeyEntity.ts +15 -15
- package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
- package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
- package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
- package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
- package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
- package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
- package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
- package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
- package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
- package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
- package/src/api/notifications/primitives/$notification.ts +43 -4
- package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
- package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
- package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
- package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
- package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
- package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
- package/src/api/notifications/services/NotificationSenderService.ts +38 -2
- package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
- package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
- package/src/api/oauth/controllers/OAuthController.ts +132 -12
- package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
- package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
- package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
- package/src/api/oauth/index.ts +1 -0
- package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
- package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
- package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
- package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
- package/src/api/oauth/services/OAuthClientService.ts +228 -15
- package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
- package/src/api/organizations/entities/organizations.ts +6 -6
- package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
- package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
- package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
- package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
- package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
- package/src/api/parameters/entities/parameters.ts +29 -16
- package/src/api/parameters/primitives/$parameter.ts +3 -3
- package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
- package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
- package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
- package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
- package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
- package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
- package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
- package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
- package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
- package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
- package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
- package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
- package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
- package/src/api/parameters/services/ParameterProvider.ts +152 -65
- package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
- package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
- package/src/api/payments/controllers/PaymentController.ts +4 -4
- package/src/api/payments/entities/paymentIntents.ts +11 -11
- package/src/api/payments/entities/paymentMethods.ts +11 -11
- package/src/api/payments/entities/refunds.ts +9 -9
- package/src/api/payments/providers/PaymentProvider.ts +18 -0
- package/src/api/payments/schemas/intentSchemas.ts +25 -25
- package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
- package/src/api/payments/services/PaymentService.ts +60 -3
- package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
- package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
- package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
- package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
- package/src/api/subscriptions/entities/subscriptions.ts +22 -22
- package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
- package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
- package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
- package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
- package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
- package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
- package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
- package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
- package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
- package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
- package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
- package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
- package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
- package/src/api/users/controllers/AdminIdentityController.ts +29 -19
- package/src/api/users/controllers/AdminSessionController.ts +37 -27
- package/src/api/users/controllers/AdminUserController.ts +75 -53
- package/src/api/users/controllers/MySessionController.ts +125 -0
- package/src/api/users/controllers/RealmController.ts +9 -9
- package/src/api/users/controllers/UserController.ts +55 -55
- package/src/api/users/entities/identities.ts +8 -8
- package/src/api/users/entities/sessions.ts +17 -17
- package/src/api/users/entities/users.ts +17 -17
- package/src/api/users/index.ts +3 -0
- package/src/api/users/notifications/UserNotifications.ts +76 -24
- package/src/api/users/primitives/$realm.ts +12 -0
- package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
- package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
- package/src/api/users/schemas/createUserSchema.ts +2 -2
- package/src/api/users/schemas/identityQuerySchema.ts +4 -4
- package/src/api/users/schemas/identityResourceSchema.ts +3 -2
- package/src/api/users/schemas/loginSchema.ts +4 -4
- package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
- package/src/api/users/schemas/realmConfigSchema.ts +10 -10
- package/src/api/users/schemas/registerQuerySchema.ts +6 -6
- package/src/api/users/schemas/registerRequestSchema.ts +21 -43
- package/src/api/users/schemas/registerResponseSchema.ts +2 -2
- package/src/api/users/schemas/registerSchema.ts +13 -31
- package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
- package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
- package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
- package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
- package/src/api/users/schemas/updateUserSchema.ts +3 -4
- package/src/api/users/schemas/userQuerySchema.ts +7 -7
- package/src/api/users/services/RegistrationService.ts +25 -11
- package/src/api/users/services/UserService.ts +12 -6
- package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
- package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
- package/src/api/verifications/controllers/VerificationController.ts +13 -27
- package/src/api/verifications/entities/verifications.ts +13 -14
- package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
- package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
- package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
- package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
- package/src/api/verifications/services/VerificationService.ts +12 -0
- package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
- package/src/batch/__tests__/$batch.spec.ts +22 -22
- package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
- package/src/bin/index.ts +1 -1
- package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
- package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
- package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
- package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
- package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
- package/src/cache/core/primitives/$cache.ts +7 -10
- package/src/cache/database/entities/cacheEntries.ts +16 -27
- package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
- package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
- package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
- package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
- package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
- package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
- package/src/cli/core/atoms/appEntryOptions.ts +5 -5
- package/src/cli/core/atoms/buildOptions.ts +76 -88
- package/src/cli/core/atoms/changelogOptions.ts +3 -3
- package/src/cli/core/atoms/devOptions.ts +3 -3
- package/src/cli/core/commands/build.ts +36 -49
- package/src/cli/core/commands/db.ts +171 -83
- package/src/cli/core/commands/dev.ts +8 -8
- package/src/cli/core/commands/gen/changelog.ts +12 -14
- package/src/cli/core/commands/gen/env.ts +6 -6
- package/src/cli/core/commands/gen/openapi.ts +6 -6
- package/src/cli/core/commands/init.ts +28 -33
- package/src/cli/core/commands/pack.ts +10 -10
- package/src/cli/core/commands/root.ts +7 -8
- package/src/cli/core/commands/test.ts +17 -20
- package/src/cli/core/index.ts +0 -3
- package/src/cli/core/tasks/BuildCloudflareTask.ts +138 -245
- package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
- package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
- package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
- package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
- package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
- package/src/cli/i18n/services/I18nCheckService.ts +65 -11
- package/src/cli/platform/commands/SecretsCommand.ts +24 -25
- package/src/cli/platform/commands/platform.ts +40 -46
- package/src/cli/platform/index.ts +1 -1
- package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
- package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
- package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
- package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +141 -50
- package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
- package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
- package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
- package/src/cli/platform-lib/schemas/platform.ts +51 -51
- package/src/cli/platform-lib/schemas/vercel.ts +28 -28
- package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
- package/src/cli/platform-lib/services/VercelApi.ts +4 -4
- package/src/cli/platform-lib/services/VercelCli.ts +6 -15
- package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
- package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
- package/src/cli/vendor/commands/VendorCommand.ts +11 -12
- package/src/command/__tests__/$command.spec.ts +82 -83
- package/src/command/__tests__/Asker.spec.ts +6 -13
- package/src/command/__tests__/CliProvider.spec.ts +136 -149
- package/src/command/__tests__/Runner.spec.ts +86 -110
- package/src/command/helpers/Asker.ts +23 -58
- package/src/command/helpers/Runner.ts +34 -110
- package/src/command/index.ts +4 -9
- package/src/command/primitives/$command.ts +10 -10
- package/src/command/providers/CliProvider.ts +183 -161
- package/src/core/Alepha.ts +62 -13
- package/src/core/__tests__/$atom.spec.ts +52 -3
- package/src/core/__tests__/$computed.spec.ts +129 -0
- package/src/core/__tests__/$env.spec.ts +13 -13
- package/src/core/__tests__/$inject.spec.ts +4 -4
- package/src/core/__tests__/$module.spec.ts +1 -1
- package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
- package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
- package/src/core/__tests__/Alepha-start.spec.ts +3 -3
- package/src/core/__tests__/CodecManager.spec.ts +113 -94
- package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
- package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
- package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
- package/src/core/__tests__/StateManager.spec.ts +423 -0
- package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
- package/src/core/__tests__/TypeProvider.spec.ts +314 -309
- package/src/core/__tests__/dump.spec.ts +6 -6
- package/src/core/__tests__/pagination.spec.ts +4 -4
- package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
- package/src/core/errors/TypeBoxError.ts +10 -4
- package/src/core/helpers/FileLike.ts +5 -5
- package/src/core/helpers/coerceStrings.ts +70 -0
- package/src/core/helpers/jsonSchemaToZod.ts +112 -0
- package/src/core/index.shared.ts +4 -1
- package/src/core/primitives/$atom.ts +95 -27
- package/src/core/primitives/$computed.ts +148 -0
- package/src/core/primitives/$env.ts +5 -5
- package/src/core/primitives/$state.ts +1 -1
- package/src/core/providers/AlsProvider.ts +26 -0
- package/src/core/providers/CodecManager.ts +1 -2
- package/src/core/providers/JsonSchemaCodec.ts +1 -2
- package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
- package/src/core/providers/SchemaValidator.ts +48 -158
- package/src/core/providers/StateManager.ts +383 -9
- package/src/core/providers/TypeProvider.ts +80 -734
- package/src/core/providers/ZodProvider.ts +380 -0
- package/src/core/providers/zodAugment.ts +69 -0
- package/src/core/schemas/pageQuerySchema.ts +19 -21
- package/src/core/schemas/pageSchema.ts +47 -57
- package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
- package/src/crypto/providers/SecretProvider.ts +16 -10
- package/src/datetime/primitives/$throttle.ts +6 -1
- package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
- package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
- package/src/email/core/index.ts +7 -2
- package/src/email/core/primitives/$email.ts +5 -1
- package/src/email/core/providers/LocalEmailProvider.ts +5 -5
- package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
- package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
- package/src/fake/__tests__/keyName.example.ts +21 -21
- package/src/fake/__tests__/keyName.spec.ts +41 -41
- package/src/fake/__tests__/module.example.ts +8 -8
- package/src/fake/providers/FakeProvider.ts +122 -121
- package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
- package/src/lock/core/index.ts +1 -0
- package/src/lock/core/primitives/$lock.ts +13 -6
- package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
- package/src/logger/__tests__/Logger.spec.ts +49 -0
- package/src/logger/index.ts +25 -18
- package/src/logger/providers/CliFormatterProvider.ts +75 -0
- package/src/logger/schemas/logEntrySchema.ts +10 -10
- package/src/logger/services/Logger.ts +18 -0
- package/src/mcp/__tests__/$prompt.spec.ts +21 -23
- package/src/mcp/__tests__/$tool.spec.ts +22 -22
- package/src/mcp/__tests__/McpServerProvider.spec.ts +82 -11
- package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
- package/src/mcp/__tests__/integration.spec.ts +33 -33
- package/src/mcp/primitives/$prompt.ts +11 -9
- package/src/mcp/primitives/$tool.ts +27 -86
- package/src/mcp/providers/McpServerProvider.ts +55 -0
- package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
- package/src/orm/__tests__/$repository-tests.ts +133 -27
- package/src/orm/__tests__/$repository.spec.ts +23 -0
- package/src/orm/__tests__/$transactional-tests.ts +4 -4
- package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
- package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
- package/src/orm/__tests__/QueryManager.spec.ts +5 -5
- package/src/orm/__tests__/delete-returning-tests.ts +11 -11
- package/src/orm/__tests__/deletedAt-tests.ts +3 -3
- package/src/orm/__tests__/enums.spec.ts +29 -25
- package/src/orm/__tests__/execute-tests.ts +8 -8
- package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
- package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
- package/src/orm/__tests__/joins-tests.ts +30 -30
- package/src/orm/__tests__/organization-tests.ts +105 -3
- package/src/orm/__tests__/organization.spec.ts +46 -0
- package/src/orm/__tests__/orm-errors.spec.ts +10 -10
- package/src/orm/__tests__/orm-next-tests.ts +29 -29
- package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
- package/src/orm/__tests__/primaryKey.spec.ts +4 -4
- package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
- package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
- package/src/orm/__tests__/references.spec.ts +7 -7
- package/src/orm/__tests__/security.spec.ts +17 -17
- package/src/orm/__tests__/string-operators-tests.ts +5 -5
- package/src/orm/__tests__/timestamps-tests.ts +14 -14
- package/src/orm/__tests__/validation-tests.ts +5 -5
- package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
- package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
- package/src/orm/core/entities/alephaSequences.ts +8 -8
- package/src/orm/core/helpers/pgAttr.ts +4 -4
- package/src/orm/core/primitives/$entity.ts +10 -6
- package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
- package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
- package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
- package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
- package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
- package/src/orm/core/schemas/insertSchema.ts +14 -18
- package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
- package/src/orm/core/schemas/updateSchema.ts +10 -16
- package/src/orm/core/services/PgRelationManager.ts +2 -2
- package/src/orm/core/services/QueryManager.ts +13 -2
- package/src/orm/core/services/Repository.ts +88 -33
- package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
- package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
- package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
- package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
- package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
- package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
- package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
- package/src/queue/core/__tests__/shared.ts +6 -6
- package/src/queue/core/primitives/$consumer.ts +5 -5
- package/src/queue/core/primitives/$queue.ts +44 -61
- package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
- package/src/queue/core/providers/WorkerProvider.ts +17 -14
- package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
- package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
- package/src/react/core/__tests__/Router.spec.tsx +4 -4
- package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
- package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
- package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
- package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
- package/src/react/core/components/ErrorBoundary.tsx +42 -0
- package/src/react/core/hooks/useAction.ts +56 -19
- package/src/react/core/hooks/useComputed.ts +91 -0
- package/src/react/core/hooks/useSelector.ts +67 -0
- package/src/react/core/hooks/useStore.ts +36 -17
- package/src/react/core/index.ts +3 -0
- package/src/react/core/utils/shallowEqual.ts +36 -0
- package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +71 -0
- package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +96 -0
- package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
- package/src/react/form/errors/FormValidationError.ts +0 -2
- package/src/react/form/hooks/useForm.ts +19 -4
- package/src/react/form/hooks/useFormQuerySync.ts +0 -0
- package/src/react/form/services/FormModel.ts +124 -86
- package/src/react/form/services/parseField.ts +66 -27
- package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
- package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
- package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
- package/src/react/i18n/providers/I18nProvider.ts +173 -14
- package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
- package/src/react/router/__tests__/$page.spec.tsx +21 -21
- package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
- package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
- package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
- package/src/react/router/components/NestedView.tsx +11 -3
- package/src/react/router/hooks/useQueryParams.ts +1 -1
- package/src/react/router/index.browser.ts +4 -0
- package/src/react/router/index.shared.ts +1 -0
- package/src/react/router/index.ts +9 -0
- package/src/react/router/primitives/$page.ts +2 -2
- package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
- package/src/react/router/providers/ReactBrowserRouterProvider.ts +15 -1
- package/src/react/router/providers/ReactPageProvider.ts +38 -13
- package/src/react/router/providers/ReactServerProvider.ts +105 -16
- package/src/react/router/providers/RootComponentsProvider.ts +13 -0
- package/src/react/router/providers/RouterLocaleProvider.ts +125 -0
- package/src/react/router/providers/__tests__/RootComponentsProvider.spec.ts +15 -0
- package/src/react/router/providers/__tests__/rootComponents.ssr.browser.spec.tsx +67 -0
- package/src/react/sitemap/__tests__/$sitemap.spec.ts +131 -0
- package/src/react/sitemap/index.browser.ts +21 -0
- package/src/react/sitemap/index.ts +25 -0
- package/src/react/sitemap/primitives/$sitemap.browser.ts +26 -0
- package/src/react/sitemap/primitives/$sitemap.ts +196 -0
- package/src/react/ui/atoms/uiAtom.ts +6 -6
- package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
- package/src/react/ui/hooks/useColorMode.ts +11 -4
- package/src/react/ui/services/SchemaControl.ts +4 -4
- package/src/redis/providers/BunRedisProvider.ts +19 -11
- package/src/redis/providers/NodeRedisProvider.ts +3 -3
- package/src/scheduler/primitives/$scheduler.ts +21 -8
- package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
- package/src/security/atoms/currentTenantAtom.ts +6 -6
- package/src/security/atoms/currentUserAtom.ts +2 -2
- package/src/security/primitives/$issuer.ts +24 -2
- package/src/security/providers/JwtProvider.ts +100 -0
- package/src/security/providers/SecurityProvider.ts +43 -2
- package/src/security/schemas/permissionSchema.ts +19 -19
- package/src/security/schemas/roleSchema.ts +22 -28
- package/src/security/schemas/userAccountInfoSchema.ts +47 -37
- package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
- package/src/server/auth/__tests__/federationRedirectReplay.spec.ts +44 -0
- package/src/server/auth/helpers/appleClientSecret.ts +24 -0
- package/src/server/auth/helpers/jtiReplayGuard.ts +41 -0
- package/src/server/auth/helpers/safeRedirectPath.ts +19 -0
- package/src/server/auth/index.ts +1 -0
- package/src/server/auth/primitives/$auth.ts +6 -6
- package/src/server/auth/primitives/$authApple.ts +10 -10
- package/src/server/auth/primitives/$authFacebook.ts +10 -10
- package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
- package/src/server/auth/primitives/$authGithub.ts +10 -10
- package/src/server/auth/primitives/$authGoogle.ts +10 -10
- package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
- package/src/server/auth/providers/ServerAuthProvider.ts +67 -52
- package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
- package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
- package/src/server/auth/schemas/tokensSchema.ts +16 -16
- package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
- package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
- package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
- package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
- package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +82 -12
- package/src/server/cookies/index.browser.ts +4 -1
- package/src/server/cookies/index.ts +8 -1
- package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
- package/src/server/cookies/primitives/$cookie.ts +16 -0
- package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
- package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
- package/src/server/cookies/providers/ServerCookiesProvider.ts +32 -4
- package/src/server/cookies/services/CookieParser.ts +6 -1
- package/src/server/core/__tests__/$action.spec.ts +13 -13
- package/src/server/core/__tests__/$middleware.spec.ts +10 -10
- package/src/server/core/__tests__/$route.spec.ts +9 -9
- package/src/server/core/__tests__/$sse.spec.ts +26 -26
- package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
- package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
- package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
- package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
- package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
- package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
- package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
- package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
- package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
- package/src/server/core/errors/ValidationError.ts +6 -3
- package/src/server/core/helpers/isMultipart.ts +2 -1
- package/src/server/core/index.ts +5 -2
- package/src/server/core/interfaces/ServerRequest.ts +14 -14
- package/src/server/core/primitives/$action.ts +26 -36
- package/src/server/core/primitives/$route.ts +27 -0
- package/src/server/core/primitives/$sse.ts +3 -3
- package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
- package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
- package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
- package/src/server/core/providers/ServerCompressProvider.ts +9 -10
- package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
- package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
- package/src/server/core/providers/ServerRouterProvider.ts +44 -15
- package/src/server/core/schemas/errorSchema.ts +20 -25
- package/src/server/core/schemas/okSchema.ts +9 -14
- package/src/server/core/services/HttpClient.ts +13 -1
- package/src/server/core/services/ServerRequestParser.ts +6 -6
- package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
- package/src/server/health/schemas/healthSchema.ts +6 -6
- package/src/server/links/__tests__/$remote.spec.ts +3 -3
- package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
- package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
- package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
- package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
- package/src/server/links/atoms/apiLinksAtom.ts +2 -2
- package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
- package/src/server/links/primitives/$remote.ts +3 -3
- package/src/server/links/providers/LinkProvider.ts +3 -3
- package/src/server/links/providers/ServerLinksProvider.ts +20 -20
- package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
- package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
- package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
- package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
- package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
- package/src/server/swagger/__tests__/ui.spec.ts +3 -3
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
- package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
- package/src/system/providers/NodeShellProvider.ts +4 -1
- package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
- package/src/topic/core/__tests__/shared.ts +8 -8
- package/src/topic/core/primitives/$subscriber.ts +5 -5
- package/src/topic/core/primitives/$topic.ts +14 -14
- package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
- package/dist/container/core/index.d.ts +0 -236
- package/dist/container/core/index.d.ts.map +0 -1
- package/dist/container/core/index.js +0 -231
- package/dist/container/core/index.js.map +0 -1
- package/dist/container/core/index.workerd.js +0 -192
- package/dist/container/core/index.workerd.js.map +0 -1
- package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
- package/src/command/helpers/PrettyAsker.ts +0 -256
- package/src/command/helpers/PrettyPrint.ts +0 -332
- package/src/container/core/__tests__/$container.spec.ts +0 -83
- package/src/container/core/index.ts +0 -50
- package/src/container/core/index.workerd.ts +0 -53
- package/src/container/core/interfaces/ContainerOptions.ts +0 -69
- package/src/container/core/primitives/$container.ts +0 -100
- package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
- package/src/container/core/providers/ContainerProvider.ts +0 -92
- package/src/container/core/providers/MockContainerProvider.ts +0 -62
- package/src/container/core/providers/NodeContainerProvider.ts +0 -53
- package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
- package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
- /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Alepha,
|
|
1
|
+
import { Alepha, jsonSchemaToZod, z } from "alepha";
|
|
2
2
|
import { DateTimeProvider } from "alepha/datetime";
|
|
3
3
|
import { AlephaOrmPostgres } from "alepha/orm/postgres";
|
|
4
|
+
import { currentTenantAtom } from "alepha/security";
|
|
4
5
|
import { describe, expect, it } from "vitest";
|
|
5
6
|
import {
|
|
6
7
|
$parameter,
|
|
@@ -8,9 +9,9 @@ import {
|
|
|
8
9
|
ParameterProvider,
|
|
9
10
|
} from "../index.ts";
|
|
10
11
|
|
|
11
|
-
const featureSchema =
|
|
12
|
-
enableBeta:
|
|
13
|
-
maxUploadSize:
|
|
12
|
+
const featureSchema = z.object({
|
|
13
|
+
enableBeta: z.boolean(),
|
|
14
|
+
maxUploadSize: z.number(),
|
|
14
15
|
});
|
|
15
16
|
|
|
16
17
|
describe("$parameter", () => {
|
|
@@ -578,9 +579,9 @@ describe("Cross-instance sync", () => {
|
|
|
578
579
|
|
|
579
580
|
describe("Schema migration", () => {
|
|
580
581
|
it("should keep valid value when schema is compatible", async () => {
|
|
581
|
-
const schema =
|
|
582
|
-
name:
|
|
583
|
-
age:
|
|
582
|
+
const schema = z.object({
|
|
583
|
+
name: z.text(),
|
|
584
|
+
age: z.number().optional(),
|
|
584
585
|
});
|
|
585
586
|
|
|
586
587
|
class AppConfig {
|
|
@@ -613,9 +614,9 @@ describe("Schema migration", () => {
|
|
|
613
614
|
});
|
|
614
615
|
|
|
615
616
|
it("should merge with defaults when adding a required field", async () => {
|
|
616
|
-
const schema =
|
|
617
|
-
name:
|
|
618
|
-
age:
|
|
617
|
+
const schema = z.object({
|
|
618
|
+
name: z.text(),
|
|
619
|
+
age: z.number(),
|
|
619
620
|
});
|
|
620
621
|
|
|
621
622
|
class AppConfig {
|
|
@@ -650,11 +651,11 @@ describe("Schema migration", () => {
|
|
|
650
651
|
});
|
|
651
652
|
|
|
652
653
|
it("should reset to defaults when merge still invalid", async () => {
|
|
653
|
-
const schema =
|
|
654
|
-
items:
|
|
655
|
-
|
|
656
|
-
x:
|
|
657
|
-
y:
|
|
654
|
+
const schema = z.object({
|
|
655
|
+
items: z.array(
|
|
656
|
+
z.object({
|
|
657
|
+
x: z.number(),
|
|
658
|
+
y: z.number(),
|
|
658
659
|
}),
|
|
659
660
|
),
|
|
660
661
|
});
|
|
@@ -694,9 +695,9 @@ describe("Schema migration", () => {
|
|
|
694
695
|
});
|
|
695
696
|
|
|
696
697
|
it("should use migrate function when provided", async () => {
|
|
697
|
-
const schema =
|
|
698
|
-
name:
|
|
699
|
-
age:
|
|
698
|
+
const schema = z.object({
|
|
699
|
+
name: z.text(),
|
|
700
|
+
age: z.number(),
|
|
700
701
|
});
|
|
701
702
|
|
|
702
703
|
class AppConfig {
|
|
@@ -736,9 +737,9 @@ describe("Schema migration", () => {
|
|
|
736
737
|
});
|
|
737
738
|
|
|
738
739
|
it("should fall through to merge when migrate returns invalid value", async () => {
|
|
739
|
-
const schema =
|
|
740
|
-
name:
|
|
741
|
-
age:
|
|
740
|
+
const schema = z.object({
|
|
741
|
+
name: z.text(),
|
|
742
|
+
age: z.number(),
|
|
742
743
|
});
|
|
743
744
|
|
|
744
745
|
class AppConfig {
|
|
@@ -775,9 +776,9 @@ describe("Schema migration", () => {
|
|
|
775
776
|
});
|
|
776
777
|
|
|
777
778
|
it("should not migrate when schema hash matches", async () => {
|
|
778
|
-
const schema =
|
|
779
|
-
name:
|
|
780
|
-
age:
|
|
779
|
+
const schema = z.object({
|
|
780
|
+
name: z.text(),
|
|
781
|
+
age: z.number(),
|
|
781
782
|
});
|
|
782
783
|
|
|
783
784
|
class AppConfig {
|
|
@@ -818,8 +819,8 @@ describe("Schema migration", () => {
|
|
|
818
819
|
});
|
|
819
820
|
|
|
820
821
|
it("should handle type change by resetting to defaults", async () => {
|
|
821
|
-
const schema =
|
|
822
|
-
name:
|
|
822
|
+
const schema = z.object({
|
|
823
|
+
name: z.number(),
|
|
823
824
|
});
|
|
824
825
|
|
|
825
826
|
class AppConfig {
|
|
@@ -853,8 +854,8 @@ describe("Schema migration", () => {
|
|
|
853
854
|
});
|
|
854
855
|
|
|
855
856
|
it("should handle removed fields gracefully", async () => {
|
|
856
|
-
const schema =
|
|
857
|
-
name:
|
|
857
|
+
const schema = z.object({
|
|
858
|
+
name: z.text(),
|
|
858
859
|
});
|
|
859
860
|
|
|
860
861
|
class AppConfig {
|
|
@@ -888,9 +889,9 @@ describe("Schema migration", () => {
|
|
|
888
889
|
});
|
|
889
890
|
|
|
890
891
|
it("should not migrate when there is no DB value", async () => {
|
|
891
|
-
const schema =
|
|
892
|
-
name:
|
|
893
|
-
age:
|
|
892
|
+
const schema = z.object({
|
|
893
|
+
name: z.text(),
|
|
894
|
+
age: z.number(),
|
|
894
895
|
});
|
|
895
896
|
|
|
896
897
|
class AppConfig {
|
|
@@ -916,9 +917,9 @@ describe("Schema migration", () => {
|
|
|
916
917
|
});
|
|
917
918
|
|
|
918
919
|
it("should handle migrate function that throws", async () => {
|
|
919
|
-
const schema =
|
|
920
|
-
name:
|
|
921
|
-
age:
|
|
920
|
+
const schema = z.object({
|
|
921
|
+
name: z.text(),
|
|
922
|
+
age: z.number(),
|
|
922
923
|
});
|
|
923
924
|
|
|
924
925
|
class AppConfig {
|
|
@@ -950,9 +951,9 @@ describe("Schema migration", () => {
|
|
|
950
951
|
});
|
|
951
952
|
|
|
952
953
|
it("should notify subscribers after auto-migration", async () => {
|
|
953
|
-
const schema =
|
|
954
|
-
name:
|
|
955
|
-
age:
|
|
954
|
+
const schema = z.object({
|
|
955
|
+
name: z.text(),
|
|
956
|
+
age: z.number(),
|
|
956
957
|
});
|
|
957
958
|
|
|
958
959
|
class Config {
|
|
@@ -979,8 +980,9 @@ describe("Schema migration", () => {
|
|
|
979
980
|
config.param.sub((v) => received.push(v));
|
|
980
981
|
|
|
981
982
|
// Now save a value with old schema hash to trigger migration
|
|
982
|
-
// Reset migrationChecked to allow re-migration
|
|
983
|
-
|
|
983
|
+
// Reset migrationChecked to allow re-migration. The value caches are now
|
|
984
|
+
// keyed `${org}:${name}` — no org atom in this test → the `~global` org.
|
|
985
|
+
(provider as any).migrationChecked.delete("~global:migrate.notify.sub");
|
|
984
986
|
await provider.save(
|
|
985
987
|
"migrate.notify.sub",
|
|
986
988
|
{ name: "alice" },
|
|
@@ -998,9 +1000,9 @@ describe("Schema migration", () => {
|
|
|
998
1000
|
});
|
|
999
1001
|
|
|
1000
1002
|
it("should handle completely new shape by resetting to defaults", async () => {
|
|
1001
|
-
const schema =
|
|
1002
|
-
width:
|
|
1003
|
-
height:
|
|
1003
|
+
const schema = z.object({
|
|
1004
|
+
width: z.number(),
|
|
1005
|
+
height: z.number(),
|
|
1004
1006
|
});
|
|
1005
1007
|
|
|
1006
1008
|
class Config {
|
|
@@ -1034,9 +1036,9 @@ describe("Schema migration", () => {
|
|
|
1034
1036
|
});
|
|
1035
1037
|
|
|
1036
1038
|
it("should only migrate once per lifecycle in Node.js", async () => {
|
|
1037
|
-
const schema =
|
|
1038
|
-
name:
|
|
1039
|
-
count:
|
|
1039
|
+
const schema = z.object({
|
|
1040
|
+
name: z.text(),
|
|
1041
|
+
count: z.number(),
|
|
1040
1042
|
});
|
|
1041
1043
|
|
|
1042
1044
|
class Config {
|
|
@@ -1421,6 +1423,44 @@ describe("getCurrentWithDefault", () => {
|
|
|
1421
1423
|
});
|
|
1422
1424
|
expect(result.schema).not.toBeNull();
|
|
1423
1425
|
});
|
|
1426
|
+
|
|
1427
|
+
it("should return the schema as JSON Schema, not a raw ZodObject", async () => {
|
|
1428
|
+
// Regression: the parameter's `schema` is a live `ZodObject`. It must be
|
|
1429
|
+
// serialized to JSON Schema before transport — otherwise the action's
|
|
1430
|
+
// `schema: z.json()` response validation rejects it ("expected record,
|
|
1431
|
+
// received ZodObject at /schema"), 500-ing the admin Parameters UI when an
|
|
1432
|
+
// item is opened. The UI rebuilds its form by round-tripping the value back
|
|
1433
|
+
// through `jsonSchemaToZod` (the inverse of `z.toJSONSchema`).
|
|
1434
|
+
class AppConfig {
|
|
1435
|
+
features = $parameter({
|
|
1436
|
+
name: "gwd.schema.json",
|
|
1437
|
+
schema: featureSchema,
|
|
1438
|
+
default: { enableBeta: false, maxUploadSize: 10485760 },
|
|
1439
|
+
});
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
const alepha = Alepha.create().with(AlephaOrmPostgres);
|
|
1443
|
+
alepha.with(AlephaApiParameters);
|
|
1444
|
+
alepha.with(AppConfig);
|
|
1445
|
+
await alepha.start();
|
|
1446
|
+
|
|
1447
|
+
const provider = alepha.inject(ParameterProvider);
|
|
1448
|
+
const result = await provider.getCurrentWithDefault("gwd.schema.json");
|
|
1449
|
+
|
|
1450
|
+
// A plain JSON-Schema record describing the parameter shape — never the
|
|
1451
|
+
// Zod instance (which would have `_zod`/`def`, not `type`/`properties`).
|
|
1452
|
+
expect(z.schema.isObject(result.schema as never)).toBe(false);
|
|
1453
|
+
expect((result.schema as { type?: string }).type).toBe("object");
|
|
1454
|
+
expect(
|
|
1455
|
+
Object.keys((result.schema as { properties?: object }).properties ?? {}),
|
|
1456
|
+
).toEqual(expect.arrayContaining(["enableBeta", "maxUploadSize"]));
|
|
1457
|
+
|
|
1458
|
+
// Round-trips back to a working Zod schema for the admin form.
|
|
1459
|
+
const rebuilt = jsonSchemaToZod(result.schema);
|
|
1460
|
+
expect(
|
|
1461
|
+
rebuilt.safeParse({ enableBeta: true, maxUploadSize: 42 }).success,
|
|
1462
|
+
).toBe(true);
|
|
1463
|
+
});
|
|
1424
1464
|
});
|
|
1425
1465
|
|
|
1426
1466
|
// ---------------------------------------------------------------------------
|
|
@@ -1654,7 +1694,8 @@ describe("set with scheduled activation", () => {
|
|
|
1654
1694
|
|
|
1655
1695
|
// cachedNext should be populated
|
|
1656
1696
|
const providerAny = provider as any;
|
|
1657
|
-
|
|
1697
|
+
// Value caches are keyed `${org}:${name}`; no org atom here → `~global`.
|
|
1698
|
+
const cachedNext = providerAny.cachedNext.get("~global:set.sched.cache");
|
|
1658
1699
|
expect(cachedNext).not.toBeUndefined();
|
|
1659
1700
|
expect(cachedNext.content).toEqual({
|
|
1660
1701
|
enableBeta: true,
|
|
@@ -1878,11 +1919,11 @@ describe("reloadNextInBackground", () => {
|
|
|
1878
1919
|
});
|
|
1879
1920
|
|
|
1880
1921
|
// ---------------------------------------------------------------------------
|
|
1881
|
-
// 10. ParameterTreeNode schema uses
|
|
1922
|
+
// 10. ParameterTreeNode schema uses z.any() for children
|
|
1882
1923
|
// ---------------------------------------------------------------------------
|
|
1883
1924
|
|
|
1884
1925
|
describe("ParameterTreeNode children structure", () => {
|
|
1885
|
-
it("should produce correctly typed children at runtime despite
|
|
1926
|
+
it("should produce correctly typed children at runtime despite z.any() schema", async () => {
|
|
1886
1927
|
const alepha = Alepha.create().with(AlephaOrmPostgres);
|
|
1887
1928
|
alepha.with(AlephaApiParameters);
|
|
1888
1929
|
await alepha.start();
|
|
@@ -2013,7 +2054,7 @@ describe("$parameter.name fallback", () => {
|
|
|
2013
2054
|
it("should use ClassName.propertyKey when name option is omitted", async () => {
|
|
2014
2055
|
class MySettings {
|
|
2015
2056
|
theme = $parameter({
|
|
2016
|
-
schema:
|
|
2057
|
+
schema: z.object({ dark: z.boolean() }),
|
|
2017
2058
|
default: { dark: false },
|
|
2018
2059
|
});
|
|
2019
2060
|
}
|
|
@@ -2031,7 +2072,7 @@ describe("$parameter.name fallback", () => {
|
|
|
2031
2072
|
class MySettings {
|
|
2032
2073
|
theme = $parameter({
|
|
2033
2074
|
name: "app.ui.theme",
|
|
2034
|
-
schema:
|
|
2075
|
+
schema: z.object({ dark: z.boolean() }),
|
|
2035
2076
|
default: { dark: false },
|
|
2036
2077
|
});
|
|
2037
2078
|
}
|
|
@@ -2246,3 +2287,141 @@ describe("set idempotency", () => {
|
|
|
2246
2287
|
expect(received.length).toBe(0);
|
|
2247
2288
|
});
|
|
2248
2289
|
});
|
|
2290
|
+
|
|
2291
|
+
describe("$parameter multi-tenant isolation", () => {
|
|
2292
|
+
it("partitions stored values + caches by the active org (no cross-tenant read/write)", async () => {
|
|
2293
|
+
class AppConfig {
|
|
2294
|
+
settings = $parameter({
|
|
2295
|
+
name: "club.settings",
|
|
2296
|
+
schema: featureSchema,
|
|
2297
|
+
default: { enableBeta: false, maxUploadSize: 1 },
|
|
2298
|
+
});
|
|
2299
|
+
}
|
|
2300
|
+
|
|
2301
|
+
const alepha = Alepha.create().with(AlephaOrmPostgres);
|
|
2302
|
+
alepha.with(AlephaApiParameters);
|
|
2303
|
+
alepha.with(AppConfig);
|
|
2304
|
+
await alepha.start();
|
|
2305
|
+
|
|
2306
|
+
const config = alepha.inject(AppConfig);
|
|
2307
|
+
const orgA = "00000000-0000-0000-0000-0000000000aa";
|
|
2308
|
+
const orgB = "00000000-0000-0000-0000-0000000000bb";
|
|
2309
|
+
|
|
2310
|
+
// Org A writes its own value.
|
|
2311
|
+
alepha.store.set(currentTenantAtom, { id: orgA });
|
|
2312
|
+
await config.settings.set({ enableBeta: true, maxUploadSize: 10 });
|
|
2313
|
+
expect(await config.settings.get()).toEqual({
|
|
2314
|
+
enableBeta: true,
|
|
2315
|
+
maxUploadSize: 10,
|
|
2316
|
+
});
|
|
2317
|
+
|
|
2318
|
+
// Org B sees ONLY its default — never org A's value (the bug this fixes).
|
|
2319
|
+
alepha.store.set(currentTenantAtom, { id: orgB });
|
|
2320
|
+
expect(await config.settings.get()).toEqual({
|
|
2321
|
+
enableBeta: false,
|
|
2322
|
+
maxUploadSize: 1,
|
|
2323
|
+
});
|
|
2324
|
+
|
|
2325
|
+
// Org B writes its own; org A is untouched.
|
|
2326
|
+
await config.settings.set({ enableBeta: false, maxUploadSize: 99 });
|
|
2327
|
+
expect(await config.settings.get()).toEqual({
|
|
2328
|
+
enableBeta: false,
|
|
2329
|
+
maxUploadSize: 99,
|
|
2330
|
+
});
|
|
2331
|
+
|
|
2332
|
+
alepha.store.set(currentTenantAtom, { id: orgA });
|
|
2333
|
+
expect(await config.settings.get()).toEqual({
|
|
2334
|
+
enableBeta: true,
|
|
2335
|
+
maxUploadSize: 10,
|
|
2336
|
+
});
|
|
2337
|
+
|
|
2338
|
+
await alepha.stop();
|
|
2339
|
+
});
|
|
2340
|
+
|
|
2341
|
+
it("revalidates a stale cache after PARAMETERS_CACHE_TTL_MS (cross-isolate write)", async () => {
|
|
2342
|
+
class AppConfig {
|
|
2343
|
+
flags = $parameter({
|
|
2344
|
+
name: "app.ttlRevalidation.flags",
|
|
2345
|
+
schema: featureSchema,
|
|
2346
|
+
default: { enableBeta: false, maxUploadSize: 1 },
|
|
2347
|
+
});
|
|
2348
|
+
}
|
|
2349
|
+
|
|
2350
|
+
// Writes a new version to the DB WITHOUT touching this instance's
|
|
2351
|
+
// in-memory cache — exactly what a `set()` handled by ANOTHER worker
|
|
2352
|
+
// isolate looks like from here (the sync topic rides the in-memory
|
|
2353
|
+
// queue, so it never crosses isolates).
|
|
2354
|
+
class TestableProvider extends ParameterProvider {
|
|
2355
|
+
writeBehindCache(name: string, value: Record<string, unknown>) {
|
|
2356
|
+
return this.save(name, value, this.schemaHashes.get(name) ?? "", {});
|
|
2357
|
+
}
|
|
2358
|
+
}
|
|
2359
|
+
|
|
2360
|
+
const alepha = Alepha.create({
|
|
2361
|
+
env: { ...process.env, PARAMETERS_CACHE_TTL_MS: "50" },
|
|
2362
|
+
});
|
|
2363
|
+
alepha.with({ provide: ParameterProvider, use: TestableProvider });
|
|
2364
|
+
alepha.with(AlephaOrmPostgres);
|
|
2365
|
+
alepha.with(AlephaApiParameters);
|
|
2366
|
+
alepha.with(AppConfig);
|
|
2367
|
+
await alepha.start();
|
|
2368
|
+
|
|
2369
|
+
const config = alepha.inject(AppConfig);
|
|
2370
|
+
await config.flags.set({ enableBeta: false, maxUploadSize: 1 });
|
|
2371
|
+
expect((await config.flags.get()).enableBeta).toBe(false);
|
|
2372
|
+
|
|
2373
|
+
const provider = alepha.inject(ParameterProvider) as TestableProvider;
|
|
2374
|
+
await provider.writeBehindCache("app.ttlRevalidation.flags", {
|
|
2375
|
+
enableBeta: true,
|
|
2376
|
+
maxUploadSize: 2,
|
|
2377
|
+
});
|
|
2378
|
+
|
|
2379
|
+
// Within the TTL the (stale) cache still serves.
|
|
2380
|
+
expect((await config.flags.get()).enableBeta).toBe(false);
|
|
2381
|
+
|
|
2382
|
+
// Past the TTL, get() re-reads the DB and converges.
|
|
2383
|
+
await new Promise((r) => setTimeout(r, 80));
|
|
2384
|
+
expect((await config.flags.get()).enableBeta).toBe(true);
|
|
2385
|
+
|
|
2386
|
+
await alepha.stop();
|
|
2387
|
+
});
|
|
2388
|
+
|
|
2389
|
+
it("keeps the historical never-revalidate behaviour when the TTL is 0", async () => {
|
|
2390
|
+
class AppConfig {
|
|
2391
|
+
flags = $parameter({
|
|
2392
|
+
name: "app.ttlZero.flags",
|
|
2393
|
+
schema: featureSchema,
|
|
2394
|
+
default: { enableBeta: false, maxUploadSize: 1 },
|
|
2395
|
+
});
|
|
2396
|
+
}
|
|
2397
|
+
|
|
2398
|
+
class TestableProvider extends ParameterProvider {
|
|
2399
|
+
writeBehindCache(name: string, value: Record<string, unknown>) {
|
|
2400
|
+
return this.save(name, value, this.schemaHashes.get(name) ?? "", {});
|
|
2401
|
+
}
|
|
2402
|
+
}
|
|
2403
|
+
|
|
2404
|
+
const alepha = Alepha.create({
|
|
2405
|
+
env: { ...process.env, PARAMETERS_CACHE_TTL_MS: "0" },
|
|
2406
|
+
});
|
|
2407
|
+
alepha.with({ provide: ParameterProvider, use: TestableProvider });
|
|
2408
|
+
alepha.with(AlephaOrmPostgres);
|
|
2409
|
+
alepha.with(AlephaApiParameters);
|
|
2410
|
+
alepha.with(AppConfig);
|
|
2411
|
+
await alepha.start();
|
|
2412
|
+
|
|
2413
|
+
const config = alepha.inject(AppConfig);
|
|
2414
|
+
await config.flags.set({ enableBeta: false, maxUploadSize: 1 });
|
|
2415
|
+
|
|
2416
|
+
const provider = alepha.inject(ParameterProvider) as TestableProvider;
|
|
2417
|
+
await provider.writeBehindCache("app.ttlZero.flags", {
|
|
2418
|
+
enableBeta: true,
|
|
2419
|
+
maxUploadSize: 2,
|
|
2420
|
+
});
|
|
2421
|
+
|
|
2422
|
+
await new Promise((r) => setTimeout(r, 80));
|
|
2423
|
+
expect((await config.flags.get()).enableBeta).toBe(false);
|
|
2424
|
+
|
|
2425
|
+
await alepha.stop();
|
|
2426
|
+
});
|
|
2427
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $inject, Alepha, AlephaError,
|
|
1
|
+
import { $inject, Alepha, AlephaError, z } from "alepha";
|
|
2
2
|
import { $secure } from "alepha/security";
|
|
3
3
|
import { $action, okSchema } from "alepha/server";
|
|
4
4
|
import { ParameterAudits } from "../audits/ParameterAudits.ts";
|
|
@@ -43,7 +43,7 @@ export class AdminParameterController {
|
|
|
43
43
|
path: "/parameters/tree",
|
|
44
44
|
method: "GET",
|
|
45
45
|
schema: {
|
|
46
|
-
response:
|
|
46
|
+
response: z.array(parameterTreeNodeSchema),
|
|
47
47
|
},
|
|
48
48
|
handler: async () => {
|
|
49
49
|
return this.provider.getParameterTree();
|
|
@@ -80,9 +80,9 @@ export class AdminParameterController {
|
|
|
80
80
|
method: "GET",
|
|
81
81
|
schema: {
|
|
82
82
|
params: parameterNameParamSchema,
|
|
83
|
-
query:
|
|
84
|
-
limit:
|
|
85
|
-
offset:
|
|
83
|
+
query: z.object({
|
|
84
|
+
limit: z.integer().min(1).max(100).optional(),
|
|
85
|
+
offset: z.integer().min(0).optional(),
|
|
86
86
|
}),
|
|
87
87
|
response: parameterHistoryResponseSchema,
|
|
88
88
|
},
|
|
@@ -305,14 +305,11 @@ export class AdminParameterController {
|
|
|
305
305
|
path: "/parameters/delete",
|
|
306
306
|
method: "POST",
|
|
307
307
|
schema: {
|
|
308
|
-
body:
|
|
309
|
-
names:
|
|
310
|
-
minItems: 1,
|
|
311
|
-
maxItems: 1000,
|
|
312
|
-
}),
|
|
308
|
+
body: z.object({
|
|
309
|
+
names: z.array(z.string().min(1)).min(1).max(1000),
|
|
313
310
|
}),
|
|
314
|
-
response:
|
|
315
|
-
deleted:
|
|
311
|
+
response: z.object({
|
|
312
|
+
deleted: z.array(z.string()),
|
|
316
313
|
}),
|
|
317
314
|
},
|
|
318
315
|
handler: async ({ body }) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
import { $entity, db } from "alepha/orm";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -12,73 +12,86 @@ import { $entity, db } from "alepha/orm";
|
|
|
12
12
|
*/
|
|
13
13
|
export const parameters = $entity({
|
|
14
14
|
name: "parameters",
|
|
15
|
-
schema:
|
|
16
|
-
id: db.primaryKey(
|
|
15
|
+
schema: z.object({
|
|
16
|
+
id: db.primaryKey(z.uuid()),
|
|
17
17
|
createdAt: db.createdAt(),
|
|
18
18
|
updatedAt: db.updatedAt(),
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Tenant scope. NULLABLE on purpose (backward compatible): single-tenant
|
|
22
|
+
* apps keep writing org-less (NULL) rows with the historic global
|
|
23
|
+
* semantics. In a MULTI-TENANT process (e.g. one pooled worker serving
|
|
24
|
+
* many orgs), the active tenant is stamped by the Repository
|
|
25
|
+
* (`stampOrganization`) and reads/writes auto-filter by it — so one org's
|
|
26
|
+
* `app.settings`/`portal.site`/… can never be read or overwritten by
|
|
27
|
+
* another. The provider's in-memory value caches are keyed by org too.
|
|
28
|
+
*/
|
|
29
|
+
organizationId: db.organization(),
|
|
30
|
+
|
|
20
31
|
/**
|
|
21
32
|
* Configuration name using dot notation for tree hierarchy.
|
|
22
33
|
* Examples: "app.features", "app.pricing.tiers", "system.limits"
|
|
23
34
|
*/
|
|
24
|
-
name:
|
|
35
|
+
name: z.text(),
|
|
25
36
|
|
|
26
37
|
/**
|
|
27
38
|
* The configuration content as JSON.
|
|
28
39
|
*/
|
|
29
|
-
content:
|
|
40
|
+
content: z.json(),
|
|
30
41
|
|
|
31
42
|
/**
|
|
32
43
|
* Schema version hash for detecting schema changes.
|
|
33
44
|
* Used for auto-migration when schema evolves.
|
|
34
45
|
*/
|
|
35
|
-
schemaHash:
|
|
46
|
+
schemaHash: z.text(),
|
|
36
47
|
|
|
37
48
|
/**
|
|
38
49
|
* When this version should become active.
|
|
39
50
|
* Default is immediate (now).
|
|
40
51
|
*/
|
|
41
|
-
activationDate:
|
|
52
|
+
activationDate: z.datetime(),
|
|
42
53
|
|
|
43
54
|
/**
|
|
44
55
|
* Version number for this configuration.
|
|
45
56
|
* Auto-incremented per config name.
|
|
46
57
|
*/
|
|
47
|
-
version:
|
|
58
|
+
version: z.integer(),
|
|
48
59
|
|
|
49
60
|
/**
|
|
50
61
|
* Optional description of changes in this version.
|
|
51
62
|
*/
|
|
52
|
-
changeDescription:
|
|
63
|
+
changeDescription: z.text().optional(),
|
|
53
64
|
|
|
54
65
|
/**
|
|
55
66
|
* Optional tags for filtering/categorization.
|
|
56
67
|
*/
|
|
57
|
-
tags:
|
|
68
|
+
tags: z.array(z.text()).optional(),
|
|
58
69
|
|
|
59
70
|
/**
|
|
60
71
|
* Creator user ID (if available).
|
|
61
72
|
*/
|
|
62
|
-
creatorId:
|
|
73
|
+
creatorId: z.uuid().optional(),
|
|
63
74
|
|
|
64
75
|
/**
|
|
65
76
|
* Creator display name for audit trail.
|
|
66
77
|
*/
|
|
67
|
-
creatorName:
|
|
78
|
+
creatorName: z.text().optional(),
|
|
68
79
|
|
|
69
80
|
/**
|
|
70
81
|
* Previous content before this change (for rollback reference).
|
|
71
82
|
*/
|
|
72
|
-
previousContent:
|
|
83
|
+
previousContent: z.json().optional(),
|
|
73
84
|
|
|
74
85
|
/**
|
|
75
86
|
* Migration log if schema changed.
|
|
76
87
|
*/
|
|
77
|
-
migrationLog:
|
|
88
|
+
migrationLog: z.text().optional(),
|
|
78
89
|
}),
|
|
79
90
|
indexes: [
|
|
80
|
-
{ columns: ["name", "activationDate"] },
|
|
81
|
-
|
|
91
|
+
{ columns: ["organizationId", "name", "activationDate"] },
|
|
92
|
+
// Version numbering is per-(org, name): two tenants each own an
|
|
93
|
+
// independent v1/v2/… of the same parameter name.
|
|
94
|
+
{ columns: ["organizationId", "name", "version"], unique: true },
|
|
82
95
|
{ columns: ["activationDate"] },
|
|
83
96
|
],
|
|
84
97
|
});
|
|
@@ -26,9 +26,9 @@ import { ParameterProvider } from "../services/ParameterProvider.ts";
|
|
|
26
26
|
* class AppConfig {
|
|
27
27
|
* features = $parameter({
|
|
28
28
|
* name: "app.features.flags",
|
|
29
|
-
* schema:
|
|
30
|
-
* enableBeta:
|
|
31
|
-
* maxUploadSize:
|
|
29
|
+
* schema: z.object({
|
|
30
|
+
* enableBeta: z.boolean(),
|
|
31
|
+
* maxUploadSize: z.number()
|
|
32
32
|
* }),
|
|
33
33
|
* default: { enableBeta: false, maxUploadSize: 10485760 }
|
|
34
34
|
* });
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Static } from "alepha";
|
|
2
2
|
import { parameters } from "../entities/parameters.ts";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -7,8 +7,8 @@ import { parameters } from "../entities/parameters.ts";
|
|
|
7
7
|
* Creator fields are omitted; the controller captures the authenticated user
|
|
8
8
|
* server-side.
|
|
9
9
|
*/
|
|
10
|
-
export const activateParameterBodySchema =
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
export const activateParameterBodySchema = parameters.schema.pick({
|
|
11
|
+
version: true,
|
|
12
|
+
});
|
|
13
13
|
|
|
14
14
|
export type ActivateParameterBody = Static<typeof activateParameterBodySchema>;
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
import { parameters } from "../entities/parameters.ts";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Create parameter version body schema.
|
|
6
|
-
* Uses
|
|
6
|
+
* Uses z.pick to derive from entity, with required fields made non-optional.
|
|
7
7
|
*
|
|
8
8
|
* Creator fields are intentionally omitted: the controller captures the
|
|
9
9
|
* authenticated user server-side, so they cannot be spoofed by the client.
|
|
10
10
|
*/
|
|
11
|
-
export const createParameterVersionBodySchema =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
{
|
|
19
|
-
activationDate:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
);
|
|
11
|
+
export const createParameterVersionBodySchema = parameters.schema
|
|
12
|
+
.pick({
|
|
13
|
+
content: true,
|
|
14
|
+
schemaHash: true,
|
|
15
|
+
changeDescription: true,
|
|
16
|
+
tags: true,
|
|
17
|
+
})
|
|
18
|
+
.extend({
|
|
19
|
+
activationDate: z
|
|
20
|
+
.datetime()
|
|
21
|
+
.describe("When to activate (default: now)")
|
|
22
|
+
.optional(),
|
|
23
|
+
});
|
|
24
24
|
|
|
25
25
|
export type CreateParameterVersionBody = Static<
|
|
26
26
|
typeof createParameterVersionBodySchema
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Slim view of a parameter version's creator, embedded by the admin history
|
|
@@ -12,12 +12,12 @@ import { type Static, t } from "alepha";
|
|
|
12
12
|
* realm — comes back with `creator` undefined. Callers fall back to the raw
|
|
13
13
|
* `creatorId`.
|
|
14
14
|
*/
|
|
15
|
-
export const parameterCreatorSummarySchema =
|
|
16
|
-
id:
|
|
17
|
-
email:
|
|
18
|
-
username:
|
|
19
|
-
firstName:
|
|
20
|
-
lastName:
|
|
15
|
+
export const parameterCreatorSummarySchema = z.object({
|
|
16
|
+
id: z.uuid(),
|
|
17
|
+
email: z.string().meta({ format: "email" }).optional(),
|
|
18
|
+
username: z.shortText({ minLength: 3, maxLength: 30 }).optional(),
|
|
19
|
+
firstName: z.string().optional(),
|
|
20
|
+
lastName: z.string().optional(),
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
export type ParameterCreatorSummary = Static<
|