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,6 @@
|
|
|
1
|
-
import { $hook, $inject, $module, Alepha, AlephaError, KIND, Primitive, SchemaValidator, createPrimitive,
|
|
1
|
+
import { $hook, $inject, $module, Alepha, AlephaError, KIND, Primitive, SchemaValidator, createPrimitive, z } from "alepha";
|
|
2
2
|
import { $audit } from "alepha/api/audits";
|
|
3
|
-
import { $secure } from "alepha/security";
|
|
3
|
+
import { $secure, currentTenantAtom, currentUserAtom } from "alepha/security";
|
|
4
4
|
import { $action, okSchema } from "alepha/server";
|
|
5
5
|
import { $entity, $repository, RepositoryProvider, db } from "alepha/orm";
|
|
6
6
|
import { CryptoProvider } from "alepha/crypto";
|
|
@@ -41,63 +41,81 @@ var ParameterAudits = class {
|
|
|
41
41
|
*/
|
|
42
42
|
const parameters = $entity({
|
|
43
43
|
name: "parameters",
|
|
44
|
-
schema:
|
|
45
|
-
id: db.primaryKey(
|
|
44
|
+
schema: z.object({
|
|
45
|
+
id: db.primaryKey(z.uuid()),
|
|
46
46
|
createdAt: db.createdAt(),
|
|
47
47
|
updatedAt: db.updatedAt(),
|
|
48
48
|
/**
|
|
49
|
+
* Tenant scope. NULLABLE on purpose (backward compatible): single-tenant
|
|
50
|
+
* apps keep writing org-less (NULL) rows with the historic global
|
|
51
|
+
* semantics. In a MULTI-TENANT process (e.g. one pooled worker serving
|
|
52
|
+
* many orgs), the active tenant is stamped by the Repository
|
|
53
|
+
* (`stampOrganization`) and reads/writes auto-filter by it — so one org's
|
|
54
|
+
* `app.settings`/`portal.site`/… can never be read or overwritten by
|
|
55
|
+
* another. The provider's in-memory value caches are keyed by org too.
|
|
56
|
+
*/
|
|
57
|
+
organizationId: db.organization(),
|
|
58
|
+
/**
|
|
49
59
|
* Configuration name using dot notation for tree hierarchy.
|
|
50
60
|
* Examples: "app.features", "app.pricing.tiers", "system.limits"
|
|
51
61
|
*/
|
|
52
|
-
name:
|
|
62
|
+
name: z.text(),
|
|
53
63
|
/**
|
|
54
64
|
* The configuration content as JSON.
|
|
55
65
|
*/
|
|
56
|
-
content:
|
|
66
|
+
content: z.json(),
|
|
57
67
|
/**
|
|
58
68
|
* Schema version hash for detecting schema changes.
|
|
59
69
|
* Used for auto-migration when schema evolves.
|
|
60
70
|
*/
|
|
61
|
-
schemaHash:
|
|
71
|
+
schemaHash: z.text(),
|
|
62
72
|
/**
|
|
63
73
|
* When this version should become active.
|
|
64
74
|
* Default is immediate (now).
|
|
65
75
|
*/
|
|
66
|
-
activationDate:
|
|
76
|
+
activationDate: z.datetime(),
|
|
67
77
|
/**
|
|
68
78
|
* Version number for this configuration.
|
|
69
79
|
* Auto-incremented per config name.
|
|
70
80
|
*/
|
|
71
|
-
version:
|
|
81
|
+
version: z.integer(),
|
|
72
82
|
/**
|
|
73
83
|
* Optional description of changes in this version.
|
|
74
84
|
*/
|
|
75
|
-
changeDescription:
|
|
85
|
+
changeDescription: z.text().optional(),
|
|
76
86
|
/**
|
|
77
87
|
* Optional tags for filtering/categorization.
|
|
78
88
|
*/
|
|
79
|
-
tags:
|
|
89
|
+
tags: z.array(z.text()).optional(),
|
|
80
90
|
/**
|
|
81
91
|
* Creator user ID (if available).
|
|
82
92
|
*/
|
|
83
|
-
creatorId:
|
|
93
|
+
creatorId: z.uuid().optional(),
|
|
84
94
|
/**
|
|
85
95
|
* Creator display name for audit trail.
|
|
86
96
|
*/
|
|
87
|
-
creatorName:
|
|
97
|
+
creatorName: z.text().optional(),
|
|
88
98
|
/**
|
|
89
99
|
* Previous content before this change (for rollback reference).
|
|
90
100
|
*/
|
|
91
|
-
previousContent:
|
|
101
|
+
previousContent: z.json().optional(),
|
|
92
102
|
/**
|
|
93
103
|
* Migration log if schema changed.
|
|
94
104
|
*/
|
|
95
|
-
migrationLog:
|
|
105
|
+
migrationLog: z.text().optional()
|
|
96
106
|
}),
|
|
97
107
|
indexes: [
|
|
98
|
-
{ columns: [
|
|
108
|
+
{ columns: [
|
|
109
|
+
"organizationId",
|
|
110
|
+
"name",
|
|
111
|
+
"activationDate"
|
|
112
|
+
] },
|
|
99
113
|
{
|
|
100
|
-
columns: [
|
|
114
|
+
columns: [
|
|
115
|
+
"organizationId",
|
|
116
|
+
"name",
|
|
117
|
+
"version"
|
|
118
|
+
],
|
|
101
119
|
unique: true
|
|
102
120
|
},
|
|
103
121
|
{ columns: ["activationDate"] }
|
|
@@ -111,22 +129,22 @@ const parameters = $entity({
|
|
|
111
129
|
* Creator fields are omitted; the controller captures the authenticated user
|
|
112
130
|
* server-side.
|
|
113
131
|
*/
|
|
114
|
-
const activateParameterBodySchema =
|
|
132
|
+
const activateParameterBodySchema = parameters.schema.pick({ version: true });
|
|
115
133
|
//#endregion
|
|
116
134
|
//#region ../../src/api/parameters/schemas/createParameterVersionBodySchema.ts
|
|
117
135
|
/**
|
|
118
136
|
* Create parameter version body schema.
|
|
119
|
-
* Uses
|
|
137
|
+
* Uses z.pick to derive from entity, with required fields made non-optional.
|
|
120
138
|
*
|
|
121
139
|
* Creator fields are intentionally omitted: the controller captures the
|
|
122
140
|
* authenticated user server-side, so they cannot be spoofed by the client.
|
|
123
141
|
*/
|
|
124
|
-
const createParameterVersionBodySchema =
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
142
|
+
const createParameterVersionBodySchema = parameters.schema.pick({
|
|
143
|
+
content: true,
|
|
144
|
+
schemaHash: true,
|
|
145
|
+
changeDescription: true,
|
|
146
|
+
tags: true
|
|
147
|
+
}).extend({ activationDate: z.datetime().describe("When to activate (default: now)").optional() });
|
|
130
148
|
//#endregion
|
|
131
149
|
//#region ../../src/api/parameters/schemas/parameterCreatorSummarySchema.ts
|
|
132
150
|
/**
|
|
@@ -141,22 +159,22 @@ const createParameterVersionBodySchema = t.extend(t.pick(parameters.schema, [
|
|
|
141
159
|
* realm — comes back with `creator` undefined. Callers fall back to the raw
|
|
142
160
|
* `creatorId`.
|
|
143
161
|
*/
|
|
144
|
-
const parameterCreatorSummarySchema =
|
|
145
|
-
id:
|
|
146
|
-
email:
|
|
147
|
-
username:
|
|
162
|
+
const parameterCreatorSummarySchema = z.object({
|
|
163
|
+
id: z.uuid(),
|
|
164
|
+
email: z.string().meta({ format: "email" }).optional(),
|
|
165
|
+
username: z.shortText({
|
|
148
166
|
minLength: 3,
|
|
149
167
|
maxLength: 30
|
|
150
|
-
})),
|
|
151
|
-
firstName:
|
|
152
|
-
lastName:
|
|
168
|
+
}).optional(),
|
|
169
|
+
firstName: z.string().optional(),
|
|
170
|
+
lastName: z.string().optional()
|
|
153
171
|
});
|
|
154
172
|
//#endregion
|
|
155
173
|
//#region ../../src/api/parameters/schemas/parameterStatusSchema.ts
|
|
156
174
|
/**
|
|
157
175
|
* Parameter status enum schema.
|
|
158
176
|
*/
|
|
159
|
-
const parameterStatusSchema =
|
|
177
|
+
const parameterStatusSchema = z.enum([
|
|
160
178
|
"expired",
|
|
161
179
|
"current",
|
|
162
180
|
"next",
|
|
@@ -172,9 +190,9 @@ const parameterStatusSchema = t.enum([
|
|
|
172
190
|
* `creator` is embedded on read via a best-effort left join on `creatorId`
|
|
173
191
|
* (see `parameterCreatorSummarySchema`); it is not a stored column.
|
|
174
192
|
*/
|
|
175
|
-
const parameterResponseSchema =
|
|
193
|
+
const parameterResponseSchema = parameters.schema.extend({
|
|
176
194
|
status: parameterStatusSchema,
|
|
177
|
-
creator:
|
|
195
|
+
creator: parameterCreatorSummarySchema.optional()
|
|
178
196
|
});
|
|
179
197
|
//#endregion
|
|
180
198
|
//#region ../../src/api/parameters/schemas/parameterCurrentResponseSchema.ts
|
|
@@ -182,56 +200,59 @@ const parameterResponseSchema = t.extend(parameters.schema, {
|
|
|
182
200
|
* Current parameter response schema.
|
|
183
201
|
* Includes current version, next scheduled version, and defaults.
|
|
184
202
|
*/
|
|
185
|
-
const parameterCurrentResponseSchema =
|
|
186
|
-
current:
|
|
187
|
-
next:
|
|
188
|
-
defaultValue:
|
|
189
|
-
currentValue:
|
|
190
|
-
schema:
|
|
203
|
+
const parameterCurrentResponseSchema = z.object({
|
|
204
|
+
current: parameterResponseSchema.optional(),
|
|
205
|
+
next: parameterResponseSchema.optional(),
|
|
206
|
+
defaultValue: z.json().optional(),
|
|
207
|
+
currentValue: z.json().optional(),
|
|
208
|
+
schema: z.json().optional()
|
|
191
209
|
});
|
|
192
210
|
//#endregion
|
|
193
211
|
//#region ../../src/api/parameters/schemas/parameterHistoryResponseSchema.ts
|
|
194
212
|
/**
|
|
195
213
|
* Parameter history response schema.
|
|
196
214
|
*/
|
|
197
|
-
const parameterHistoryResponseSchema =
|
|
215
|
+
const parameterHistoryResponseSchema = z.object({ versions: z.array(parameterResponseSchema) });
|
|
198
216
|
//#endregion
|
|
199
217
|
//#region ../../src/api/parameters/schemas/parameterNameParamSchema.ts
|
|
200
218
|
/**
|
|
201
219
|
* Parameter name param schema.
|
|
202
|
-
* Uses
|
|
220
|
+
* Uses z.pick from entity for consistency.
|
|
203
221
|
*/
|
|
204
|
-
const parameterNameParamSchema =
|
|
222
|
+
const parameterNameParamSchema = parameters.schema.pick({ name: true });
|
|
205
223
|
//#endregion
|
|
206
224
|
//#region ../../src/api/parameters/schemas/parameterNamesResponseSchema.ts
|
|
207
225
|
/**
|
|
208
226
|
* Parameter names list response schema.
|
|
209
227
|
*/
|
|
210
|
-
const parameterNamesResponseSchema =
|
|
228
|
+
const parameterNamesResponseSchema = z.object({ names: z.array(z.text()) });
|
|
211
229
|
//#endregion
|
|
212
230
|
//#region ../../src/api/parameters/schemas/parameterTreeNodeSchema.ts
|
|
213
231
|
/**
|
|
214
232
|
* Tree node schema for parameter tree navigation.
|
|
215
233
|
*/
|
|
216
|
-
const parameterTreeNodeSchema =
|
|
217
|
-
name:
|
|
218
|
-
path:
|
|
219
|
-
isLeaf:
|
|
220
|
-
children:
|
|
234
|
+
const parameterTreeNodeSchema = z.object({
|
|
235
|
+
name: z.text(),
|
|
236
|
+
path: z.text(),
|
|
237
|
+
isLeaf: z.boolean(),
|
|
238
|
+
children: z.array(z.any())
|
|
221
239
|
});
|
|
222
240
|
//#endregion
|
|
223
241
|
//#region ../../src/api/parameters/schemas/parameterVersionParamSchema.ts
|
|
224
242
|
/**
|
|
225
243
|
* Parameter name and version param schema.
|
|
226
|
-
* Uses
|
|
244
|
+
* Uses z.pick from entity for consistency.
|
|
227
245
|
*/
|
|
228
|
-
const parameterVersionParamSchema =
|
|
246
|
+
const parameterVersionParamSchema = parameters.schema.pick({
|
|
247
|
+
name: true,
|
|
248
|
+
version: true
|
|
249
|
+
});
|
|
229
250
|
//#endregion
|
|
230
251
|
//#region ../../src/api/parameters/schemas/parameterVersionResponseSchema.ts
|
|
231
252
|
/**
|
|
232
253
|
* Parameter version response schema.
|
|
233
254
|
*/
|
|
234
|
-
const parameterVersionResponseSchema =
|
|
255
|
+
const parameterVersionResponseSchema = z.object({ parameter: parameterResponseSchema.optional() });
|
|
235
256
|
//#endregion
|
|
236
257
|
//#region ../../src/api/parameters/schemas/rollbackParameterBodySchema.ts
|
|
237
258
|
/**
|
|
@@ -240,7 +261,7 @@ const parameterVersionResponseSchema = t.object({ parameter: t.optional(paramete
|
|
|
240
261
|
* Creator fields are omitted; the controller captures the authenticated user
|
|
241
262
|
* server-side.
|
|
242
263
|
*/
|
|
243
|
-
const rollbackParameterBodySchema =
|
|
264
|
+
const rollbackParameterBodySchema = parameters.schema.pick({ changeDescription: true }).extend({ targetVersion: z.integer().describe("Version number to rollback to") });
|
|
244
265
|
//#endregion
|
|
245
266
|
//#region ../../src/api/parameters/services/ParameterProvider.ts
|
|
246
267
|
/**
|
|
@@ -272,7 +293,32 @@ var ParameterProvider = class {
|
|
|
272
293
|
}
|
|
273
294
|
_instanceId;
|
|
274
295
|
/**
|
|
275
|
-
*
|
|
296
|
+
* Resolve the active tenant for cache keying — MIRRORS the Repository's
|
|
297
|
+
* `resolveOrganizationValue` (tenant atom → user org) so the in-memory
|
|
298
|
+
* value caches partition exactly the way the DB rows do. Returns a sentinel
|
|
299
|
+
* for the org-less (single-tenant / no-request) case.
|
|
300
|
+
*
|
|
301
|
+
* Why this matters: the DB table is now org-scoped, but these process-global
|
|
302
|
+
* Maps are keyed by parameter NAME — without folding the org into the key, a
|
|
303
|
+
* pooled multi-tenant worker would hand org A's cached `club.settings` to a
|
|
304
|
+
* request for org B. (Cross-instance topic sync + the `ready` preload run
|
|
305
|
+
* with no request atom → the sentinel key; they refresh only org-less rows,
|
|
306
|
+
* leaving per-org caches to lazy-load + the immediate local update on `set`.
|
|
307
|
+
* That is bounded staleness, never a cross-tenant read.)
|
|
308
|
+
*/
|
|
309
|
+
orgKey() {
|
|
310
|
+
const tenant = this.alepha.store.get(currentTenantAtom);
|
|
311
|
+
if (tenant?.id) return tenant.id;
|
|
312
|
+
return this.alepha.store.get(currentUserAtom)?.organization ?? "~global";
|
|
313
|
+
}
|
|
314
|
+
/** Per-org cache key for the value caches (`${org}:${name}`). */
|
|
315
|
+
cacheKey(name) {
|
|
316
|
+
return `${this.orgKey()}:${name}`;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* In-memory cache of registered parameter primitives. Keyed by NAME only —
|
|
320
|
+
* the `$parameter` definition (schema + default) is identical for every
|
|
321
|
+
* tenant; only the stored VALUE is per-org (see the value caches below).
|
|
276
322
|
*/
|
|
277
323
|
primitives = /* @__PURE__ */ new Map();
|
|
278
324
|
/**
|
|
@@ -288,6 +334,28 @@ var ParameterProvider = class {
|
|
|
288
334
|
*/
|
|
289
335
|
loaded = /* @__PURE__ */ new Set();
|
|
290
336
|
/**
|
|
337
|
+
* Epoch millis of the last successful load (or local set) per cache key.
|
|
338
|
+
* Drives the serverless revalidation TTL (see `revalidateAfterMs`).
|
|
339
|
+
*/
|
|
340
|
+
loadedAt = /* @__PURE__ */ new Map();
|
|
341
|
+
/**
|
|
342
|
+
* How long a cached value may serve before `get()` re-reads the DB.
|
|
343
|
+
*
|
|
344
|
+
* The in-memory caches are PER ISOLATE. On serverless runtimes
|
|
345
|
+
* (Cloudflare Workers) many isolates serve the same app and the
|
|
346
|
+
* cross-instance `syncTopic` rides the queue provider — in-memory by
|
|
347
|
+
* default, so a `set()` handled by one isolate never reaches the others:
|
|
348
|
+
* without a TTL they serve the stale value until they are recycled.
|
|
349
|
+
*
|
|
350
|
+
* Defaults: 30 s on serverless, 0 (= never revalidate, the historical
|
|
351
|
+
* behaviour) elsewhere. Override with the `PARAMETERS_CACHE_TTL_MS` env.
|
|
352
|
+
*/
|
|
353
|
+
get revalidateAfterMs() {
|
|
354
|
+
const raw = this.alepha.env.PARAMETERS_CACHE_TTL_MS;
|
|
355
|
+
if (raw !== void 0 && raw !== "") return Number(raw);
|
|
356
|
+
return this.alepha.isServerless() ? 3e4 : 0;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
291
359
|
* Shared promises for deduplicating concurrent load() calls.
|
|
292
360
|
*/
|
|
293
361
|
loadPromises = /* @__PURE__ */ new Map();
|
|
@@ -324,9 +392,9 @@ var ParameterProvider = class {
|
|
|
324
392
|
*/
|
|
325
393
|
syncTopic = $topic({
|
|
326
394
|
name: "parameter:sync",
|
|
327
|
-
schema: { payload:
|
|
328
|
-
name:
|
|
329
|
-
instanceId:
|
|
395
|
+
schema: { payload: z.object({
|
|
396
|
+
name: z.text(),
|
|
397
|
+
instanceId: z.text()
|
|
330
398
|
}) },
|
|
331
399
|
handler: async ({ payload }) => {
|
|
332
400
|
await this.handleChangeNotification(payload);
|
|
@@ -346,21 +414,22 @@ var ParameterProvider = class {
|
|
|
346
414
|
* Checks if a cached next version has become current.
|
|
347
415
|
*/
|
|
348
416
|
async get(name) {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
417
|
+
const ck = this.cacheKey(name);
|
|
418
|
+
if (!this.loaded.has(ck) || this.isStale(ck)) {
|
|
419
|
+
if (!this.loadPromises.has(ck)) this.loadPromises.set(ck, this.doLoad(name));
|
|
420
|
+
await this.loadPromises.get(ck);
|
|
352
421
|
}
|
|
353
|
-
const cachedNext = this.cachedNext.get(
|
|
422
|
+
const cachedNext = this.cachedNext.get(ck);
|
|
354
423
|
if (cachedNext) {
|
|
355
424
|
const now = this.dateTimeProvider.now().toDate();
|
|
356
425
|
if (new Date(cachedNext.activationDate) <= now) {
|
|
357
|
-
this.cachedCurrent.set(
|
|
358
|
-
this.cachedNext.delete(
|
|
426
|
+
this.cachedCurrent.set(ck, cachedNext.content);
|
|
427
|
+
this.cachedNext.delete(ck);
|
|
359
428
|
this.reloadNextInBackground(name);
|
|
360
429
|
}
|
|
361
430
|
}
|
|
362
431
|
const param = this.primitives.get(name);
|
|
363
|
-
return this.cachedCurrent.has(
|
|
432
|
+
return this.cachedCurrent.has(ck) ? this.cachedCurrent.get(ck) : param?.options.default;
|
|
364
433
|
}
|
|
365
434
|
/**
|
|
366
435
|
* Set a new parameter value.
|
|
@@ -374,25 +443,35 @@ var ParameterProvider = class {
|
|
|
374
443
|
creatorId: options.creatorId,
|
|
375
444
|
creatorName: options.creatorName
|
|
376
445
|
});
|
|
446
|
+
const ck = this.cacheKey(name);
|
|
377
447
|
const now = this.dateTimeProvider.now().toDate();
|
|
378
448
|
if (!options.activationDate || options.activationDate <= now) {
|
|
379
|
-
const prev = this.cachedCurrent.get(
|
|
380
|
-
this.cachedCurrent.set(
|
|
449
|
+
const prev = this.cachedCurrent.get(ck);
|
|
450
|
+
this.cachedCurrent.set(ck, value);
|
|
381
451
|
if (JSON.stringify(prev) !== JSON.stringify(value)) this.notifySubscribers(name);
|
|
382
|
-
} else this.cachedNext.set(
|
|
452
|
+
} else this.cachedNext.set(ck, {
|
|
383
453
|
content: value,
|
|
384
454
|
activationDate: options.activationDate.toISOString()
|
|
385
455
|
});
|
|
456
|
+
this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
|
|
457
|
+
}
|
|
458
|
+
/** Whether the cached value outlived the revalidation TTL. */
|
|
459
|
+
isStale(ck) {
|
|
460
|
+
const ttl = this.revalidateAfterMs;
|
|
461
|
+
if (ttl <= 0) return false;
|
|
462
|
+
const at = this.loadedAt.get(ck);
|
|
463
|
+
return at === void 0 ? true : this.dateTimeProvider.nowMillis() - at > ttl;
|
|
386
464
|
}
|
|
387
465
|
/**
|
|
388
466
|
* Subscribe to parameter changes.
|
|
389
467
|
* Returns an unsubscribe function.
|
|
390
468
|
*/
|
|
391
469
|
sub(name, fn) {
|
|
392
|
-
|
|
393
|
-
this.subscribers.
|
|
470
|
+
const ck = this.cacheKey(name);
|
|
471
|
+
if (!this.subscribers.has(ck)) this.subscribers.set(ck, []);
|
|
472
|
+
this.subscribers.get(ck).push(fn);
|
|
394
473
|
return () => {
|
|
395
|
-
const subs = this.subscribers.get(
|
|
474
|
+
const subs = this.subscribers.get(ck);
|
|
396
475
|
if (subs) {
|
|
397
476
|
const idx = subs.indexOf(fn);
|
|
398
477
|
if (idx >= 0) subs.splice(idx, 1);
|
|
@@ -404,22 +483,24 @@ var ParameterProvider = class {
|
|
|
404
483
|
* Deduplicates concurrent calls via shared promise.
|
|
405
484
|
*/
|
|
406
485
|
async load(name) {
|
|
407
|
-
|
|
408
|
-
|
|
486
|
+
const ck = this.cacheKey(name);
|
|
487
|
+
this.loadPromises.set(ck, this.doLoad(name));
|
|
488
|
+
await this.loadPromises.get(ck);
|
|
409
489
|
}
|
|
410
490
|
/**
|
|
411
491
|
* Get the cached current content, falling back to default.
|
|
412
492
|
* Synchronous access for admin API.
|
|
413
493
|
*/
|
|
414
494
|
getCachedCurrentContent(name) {
|
|
415
|
-
|
|
495
|
+
const ck = this.cacheKey(name);
|
|
496
|
+
if (this.cachedCurrent.has(ck)) return this.cachedCurrent.get(ck);
|
|
416
497
|
return this.primitives.get(name)?.options.default;
|
|
417
498
|
}
|
|
418
499
|
/**
|
|
419
500
|
* Whether the parameter is using its default value (no DB value loaded).
|
|
420
501
|
*/
|
|
421
502
|
isUsingDefault(name) {
|
|
422
|
-
return !this.cachedCurrent.has(name);
|
|
503
|
+
return !this.cachedCurrent.has(this.cacheKey(name));
|
|
423
504
|
}
|
|
424
505
|
/**
|
|
425
506
|
* Load the current and next parameter values from database.
|
|
@@ -583,12 +664,7 @@ var ParameterProvider = class {
|
|
|
583
664
|
*/
|
|
584
665
|
async delete(name) {
|
|
585
666
|
await this.repo.deleteMany({ name: { eq: name } });
|
|
586
|
-
this.
|
|
587
|
-
this.cachedNext.delete(name);
|
|
588
|
-
this.loaded.delete(name);
|
|
589
|
-
this.loadPromises.delete(name);
|
|
590
|
-
this.loadGeneration.delete(name);
|
|
591
|
-
this.migrationChecked.delete(name);
|
|
667
|
+
this.evictCaches(name);
|
|
592
668
|
this.log.info("Parameter deleted", { name });
|
|
593
669
|
}
|
|
594
670
|
/**
|
|
@@ -597,17 +673,20 @@ var ParameterProvider = class {
|
|
|
597
673
|
async deleteMany(names) {
|
|
598
674
|
if (names.length === 0) return [];
|
|
599
675
|
await this.repo.deleteMany({ name: { inArray: names } });
|
|
600
|
-
for (const name of names)
|
|
601
|
-
this.cachedCurrent.delete(name);
|
|
602
|
-
this.cachedNext.delete(name);
|
|
603
|
-
this.loaded.delete(name);
|
|
604
|
-
this.loadPromises.delete(name);
|
|
605
|
-
this.loadGeneration.delete(name);
|
|
606
|
-
this.migrationChecked.delete(name);
|
|
607
|
-
}
|
|
676
|
+
for (const name of names) this.evictCaches(name);
|
|
608
677
|
this.log.info("Parameters deleted", { count: names.length });
|
|
609
678
|
return names;
|
|
610
679
|
}
|
|
680
|
+
/** Drop every per-org value cache entry for `name` in the active org. */
|
|
681
|
+
evictCaches(name) {
|
|
682
|
+
const ck = this.cacheKey(name);
|
|
683
|
+
this.cachedCurrent.delete(ck);
|
|
684
|
+
this.cachedNext.delete(ck);
|
|
685
|
+
this.loaded.delete(ck);
|
|
686
|
+
this.loadPromises.delete(ck);
|
|
687
|
+
this.loadGeneration.delete(ck);
|
|
688
|
+
this.migrationChecked.delete(ck);
|
|
689
|
+
}
|
|
611
690
|
/**
|
|
612
691
|
* Get a specific version of a parameter.
|
|
613
692
|
*/
|
|
@@ -662,7 +741,7 @@ var ParameterProvider = class {
|
|
|
662
741
|
}
|
|
663
742
|
const defaultValue = param?.options.default ?? null;
|
|
664
743
|
const currentValue = this.getCachedCurrentContent(name) ?? null;
|
|
665
|
-
const schema = param?.schema
|
|
744
|
+
const schema = param?.schema ? z.toJSONSchema(param.schema) : null;
|
|
666
745
|
return {
|
|
667
746
|
current: current ? {
|
|
668
747
|
...current,
|
|
@@ -697,7 +776,7 @@ var ParameterProvider = class {
|
|
|
697
776
|
async getParameterTree() {
|
|
698
777
|
const dbNames = await this.getParameterNames();
|
|
699
778
|
const registeredNames = Array.from(this.primitives.keys());
|
|
700
|
-
const allNames = [
|
|
779
|
+
const allNames = [.../* @__PURE__ */ new Set([...dbNames, ...registeredNames])].sort();
|
|
701
780
|
return this.buildTree(allNames);
|
|
702
781
|
}
|
|
703
782
|
/**
|
|
@@ -705,13 +784,14 @@ var ParameterProvider = class {
|
|
|
705
784
|
* Fetches current and next from database, updates cache.
|
|
706
785
|
*/
|
|
707
786
|
async doLoad(name) {
|
|
708
|
-
const
|
|
709
|
-
this.loadGeneration.
|
|
787
|
+
const ck = this.cacheKey(name);
|
|
788
|
+
const gen = (this.loadGeneration.get(ck) ?? 0) + 1;
|
|
789
|
+
this.loadGeneration.set(ck, gen);
|
|
710
790
|
const { current, next } = await this.loadCurrentAndNext(name);
|
|
711
791
|
const schemaHash = this.schemaHashes.get(name) ?? "";
|
|
712
|
-
if (this.loadGeneration.get(
|
|
713
|
-
if (current && !this.migrationChecked.has(
|
|
714
|
-
this.migrationChecked.add(
|
|
792
|
+
if (this.loadGeneration.get(ck) !== gen) return;
|
|
793
|
+
if (current && !this.migrationChecked.has(ck)) {
|
|
794
|
+
this.migrationChecked.add(ck);
|
|
715
795
|
const migration = this.migrateValue(name, current.content, current.schemaHash);
|
|
716
796
|
if (migration) {
|
|
717
797
|
this.log.info("Auto-migrating parameter", {
|
|
@@ -720,31 +800,33 @@ var ParameterProvider = class {
|
|
|
720
800
|
});
|
|
721
801
|
await this.save(name, migration.value, schemaHash, { changeDescription: migration.description });
|
|
722
802
|
const updated = await this.loadCurrentAndNext(name);
|
|
723
|
-
if (updated.current) this.cachedCurrent.set(
|
|
724
|
-
else this.cachedCurrent.delete(
|
|
725
|
-
if (updated.next) this.cachedNext.set(
|
|
803
|
+
if (updated.current) this.cachedCurrent.set(ck, updated.current.content);
|
|
804
|
+
else this.cachedCurrent.delete(ck);
|
|
805
|
+
if (updated.next) this.cachedNext.set(ck, {
|
|
726
806
|
content: updated.next.content,
|
|
727
807
|
activationDate: updated.next.activationDate
|
|
728
808
|
});
|
|
729
|
-
else this.cachedNext.delete(
|
|
730
|
-
this.loaded.add(
|
|
731
|
-
this.
|
|
809
|
+
else this.cachedNext.delete(ck);
|
|
810
|
+
this.loaded.add(ck);
|
|
811
|
+
this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
|
|
812
|
+
this.loadPromises.delete(ck);
|
|
732
813
|
this.notifySubscribers(name);
|
|
733
814
|
return;
|
|
734
815
|
}
|
|
735
816
|
}
|
|
736
|
-
const prev = this.cachedCurrent.get(
|
|
737
|
-
const hadPrev = this.cachedCurrent.has(
|
|
738
|
-
if (current) this.cachedCurrent.set(
|
|
739
|
-
else this.cachedCurrent.delete(
|
|
740
|
-
if (next) this.cachedNext.set(
|
|
817
|
+
const prev = this.cachedCurrent.get(ck);
|
|
818
|
+
const hadPrev = this.cachedCurrent.has(ck);
|
|
819
|
+
if (current) this.cachedCurrent.set(ck, current.content);
|
|
820
|
+
else this.cachedCurrent.delete(ck);
|
|
821
|
+
if (next) this.cachedNext.set(ck, {
|
|
741
822
|
content: next.content,
|
|
742
823
|
activationDate: next.activationDate
|
|
743
824
|
});
|
|
744
|
-
else this.cachedNext.delete(
|
|
745
|
-
this.loaded.add(
|
|
746
|
-
this.
|
|
747
|
-
|
|
825
|
+
else this.cachedNext.delete(ck);
|
|
826
|
+
this.loaded.add(ck);
|
|
827
|
+
this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
|
|
828
|
+
this.loadPromises.delete(ck);
|
|
829
|
+
if (hadPrev && JSON.stringify(prev) !== JSON.stringify(this.cachedCurrent.get(ck))) this.notifySubscribers(name);
|
|
748
830
|
}
|
|
749
831
|
/**
|
|
750
832
|
* Run migration with a distributed lock (Node.js only).
|
|
@@ -837,12 +919,13 @@ var ParameterProvider = class {
|
|
|
837
919
|
* Reload next version info in background (non-blocking).
|
|
838
920
|
*/
|
|
839
921
|
reloadNextInBackground(name) {
|
|
922
|
+
const ck = this.cacheKey(name);
|
|
840
923
|
this.loadCurrentAndNext(name).then(({ next }) => {
|
|
841
|
-
if (next) this.cachedNext.set(
|
|
924
|
+
if (next) this.cachedNext.set(ck, {
|
|
842
925
|
content: next.content,
|
|
843
926
|
activationDate: next.activationDate
|
|
844
927
|
});
|
|
845
|
-
else this.cachedNext.delete(
|
|
928
|
+
else this.cachedNext.delete(ck);
|
|
846
929
|
}).catch((err) => {
|
|
847
930
|
this.log.warn("Failed to reload next parameter version", {
|
|
848
931
|
name,
|
|
@@ -854,10 +937,11 @@ var ParameterProvider = class {
|
|
|
854
937
|
* Notify all subscribers of a value change.
|
|
855
938
|
*/
|
|
856
939
|
notifySubscribers(name) {
|
|
857
|
-
const
|
|
940
|
+
const ck = this.cacheKey(name);
|
|
941
|
+
const subs = this.subscribers.get(ck);
|
|
858
942
|
if (!subs) return;
|
|
859
943
|
const param = this.primitives.get(name);
|
|
860
|
-
const value = this.cachedCurrent.has(
|
|
944
|
+
const value = this.cachedCurrent.has(ck) ? this.cachedCurrent.get(ck) : param?.options.default;
|
|
861
945
|
for (const fn of subs) fn(value);
|
|
862
946
|
}
|
|
863
947
|
/**
|
|
@@ -965,7 +1049,7 @@ var AdminParameterController = class {
|
|
|
965
1049
|
description: "Get tree structure of all parameter names for navigation.",
|
|
966
1050
|
path: "/parameters/tree",
|
|
967
1051
|
method: "GET",
|
|
968
|
-
schema: { response:
|
|
1052
|
+
schema: { response: z.array(parameterTreeNodeSchema) },
|
|
969
1053
|
handler: async () => {
|
|
970
1054
|
return this.provider.getParameterTree();
|
|
971
1055
|
}
|
|
@@ -996,12 +1080,9 @@ var AdminParameterController = class {
|
|
|
996
1080
|
method: "GET",
|
|
997
1081
|
schema: {
|
|
998
1082
|
params: parameterNameParamSchema,
|
|
999
|
-
query:
|
|
1000
|
-
limit:
|
|
1001
|
-
|
|
1002
|
-
maximum: 100
|
|
1003
|
-
})),
|
|
1004
|
-
offset: t.optional(t.integer({ minimum: 0 }))
|
|
1083
|
+
query: z.object({
|
|
1084
|
+
limit: z.integer().min(1).max(100).optional(),
|
|
1085
|
+
offset: z.integer().min(0).optional()
|
|
1005
1086
|
}),
|
|
1006
1087
|
response: parameterHistoryResponseSchema
|
|
1007
1088
|
},
|
|
@@ -1177,11 +1258,8 @@ var AdminParameterController = class {
|
|
|
1177
1258
|
path: "/parameters/delete",
|
|
1178
1259
|
method: "POST",
|
|
1179
1260
|
schema: {
|
|
1180
|
-
body:
|
|
1181
|
-
|
|
1182
|
-
maxItems: 1e3
|
|
1183
|
-
}) }),
|
|
1184
|
-
response: t.object({ deleted: t.array(t.string()) })
|
|
1261
|
+
body: z.object({ names: z.array(z.string().min(1)).min(1).max(1e3) }),
|
|
1262
|
+
response: z.object({ deleted: z.array(z.string()) })
|
|
1185
1263
|
},
|
|
1186
1264
|
handler: async ({ body }) => {
|
|
1187
1265
|
const deleted = await this.provider.deleteMany(body.names);
|