alepha 0.23.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 +247 -235
- 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 -1143
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +456 -392
- 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 +167 -155
- 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 +205 -442
- package/dist/cli/core/index.d.ts.map +1 -1
- package/dist/cli/core/index.js +259 -284
- 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 +8 -34
- package/dist/cli/i18n/index.d.ts.map +1 -1
- package/dist/cli/i18n/index.js +6 -6
- 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 +351 -404
- package/dist/cli/platform-lib/index.d.ts.map +1 -1
- package/dist/cli/platform-lib/index.js +218 -239
- 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 +83 -195
- 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 +27 -90
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +42 -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 -5
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/form/index.js +91 -56
- 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 +4 -5
- package/dist/react/i18n/index.d.ts.map +1 -1
- package/dist/react/i18n/index.js +2 -2
- 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 +60 -24
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +378 -377
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +77 -41
- package/dist/react/router/index.js.map +1 -1
- package/dist/react/sitemap/index.d.ts +0 -1
- package/dist/react/sitemap/index.d.ts.map +1 -1
- package/dist/react/sitemap/index.js.map +1 -1
- 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 +198 -274
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +83 -621
- 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 +72 -5
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +103 -9
- 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 +116 -85
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +105 -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 +22 -35
- 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 -10
- 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 -26
- package/src/api/users/providers/RealmProvider.ts +0 -15
- 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 -24
- 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 -76
- 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 -39
- 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/tasks/BuildCloudflareTask.ts +103 -230
- package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
- package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
- package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
- 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 +13 -14
- 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 +11 -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/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 +2 -2
- package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +5 -5
- 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 +67 -47
- package/src/react/form/services/parseField.ts +66 -27
- package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
- package/src/react/i18n/providers/I18nProvider.ts +2 -2
- 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/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/primitives/$page.ts +2 -2
- package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
- package/src/react/router/providers/ReactPageProvider.ts +26 -12
- package/src/react/router/providers/ReactServerProvider.ts +13 -15
- package/src/react/sitemap/__tests__/$sitemap.spec.ts +2 -2
- 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/index.ts +0 -3
- 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 +49 -48
- 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 +14 -14
- 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 +13 -5
- 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 +6 -14
- package/src/server/core/primitives/$action.ts +26 -36
- 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/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/src/server/auth/__tests__/authFederationClient.spec.ts +0 -40
- package/src/server/auth/__tests__/federationAssertion.spec.ts +0 -146
- package/src/server/auth/helpers/federationAssertion.ts +0 -74
- package/src/server/auth/primitives/$authFederationBroker.ts +0 -273
- package/src/server/auth/primitives/$authFederationClient.ts +0 -89
- /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
import { parameterResponseSchema } from "./parameterResponseSchema.ts";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Current parameter response schema.
|
|
6
6
|
* Includes current version, next scheduled version, and defaults.
|
|
7
7
|
*/
|
|
8
|
-
export const parameterCurrentResponseSchema =
|
|
9
|
-
current:
|
|
10
|
-
next:
|
|
11
|
-
defaultValue:
|
|
12
|
-
currentValue:
|
|
13
|
-
schema:
|
|
8
|
+
export const parameterCurrentResponseSchema = z.object({
|
|
9
|
+
current: parameterResponseSchema.optional(),
|
|
10
|
+
next: parameterResponseSchema.optional(),
|
|
11
|
+
defaultValue: z.json().optional(),
|
|
12
|
+
currentValue: z.json().optional(),
|
|
13
|
+
schema: z.json().optional(),
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
export type ParameterCurrentResponse = Static<
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
import { parameterResponseSchema } from "./parameterResponseSchema.ts";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Parameter history response schema.
|
|
6
6
|
*/
|
|
7
|
-
export const parameterHistoryResponseSchema =
|
|
8
|
-
versions:
|
|
7
|
+
export const parameterHistoryResponseSchema = z.object({
|
|
8
|
+
versions: z.array(parameterResponseSchema),
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
export type ParameterHistoryResponse = Static<
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { t } from "alepha";
|
|
2
1
|
import { parameters } from "../entities/parameters.ts";
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* Parameter name param schema.
|
|
6
|
-
* Uses
|
|
5
|
+
* Uses z.pick from entity for consistency.
|
|
7
6
|
*/
|
|
8
|
-
export const parameterNameParamSchema =
|
|
7
|
+
export const parameterNameParamSchema = parameters.schema.pick({ name: true });
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Parameter names list response schema.
|
|
5
5
|
*/
|
|
6
|
-
export const parameterNamesResponseSchema =
|
|
7
|
-
names:
|
|
6
|
+
export const parameterNamesResponseSchema = z.object({
|
|
7
|
+
names: z.array(z.text()),
|
|
8
8
|
});
|
|
9
9
|
|
|
10
10
|
export type ParameterNamesResponse = Static<
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Static } from "alepha";
|
|
2
2
|
import { parameters } from "../entities/parameters.ts";
|
|
3
3
|
import { parameterCreatorSummarySchema } from "./parameterCreatorSummarySchema.ts";
|
|
4
4
|
import { parameterStatusSchema } from "./parameterStatusSchema.ts";
|
|
@@ -11,9 +11,9 @@ import { parameterStatusSchema } from "./parameterStatusSchema.ts";
|
|
|
11
11
|
* `creator` is embedded on read via a best-effort left join on `creatorId`
|
|
12
12
|
* (see `parameterCreatorSummarySchema`); it is not a stored column.
|
|
13
13
|
*/
|
|
14
|
-
export const parameterResponseSchema =
|
|
14
|
+
export const parameterResponseSchema = parameters.schema.extend({
|
|
15
15
|
status: parameterStatusSchema,
|
|
16
|
-
creator:
|
|
16
|
+
creator: parameterCreatorSummarySchema.optional(),
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
export type ParameterResponse = Static<typeof parameterResponseSchema>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Parameter status enum schema.
|
|
5
5
|
*/
|
|
6
|
-
export const parameterStatusSchema =
|
|
6
|
+
export const parameterStatusSchema = z.enum([
|
|
7
7
|
"expired",
|
|
8
8
|
"current",
|
|
9
9
|
"next",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Tree node schema for parameter tree navigation.
|
|
5
5
|
*/
|
|
6
|
-
export const parameterTreeNodeSchema =
|
|
7
|
-
name:
|
|
8
|
-
path:
|
|
9
|
-
isLeaf:
|
|
10
|
-
children:
|
|
6
|
+
export const parameterTreeNodeSchema = z.object({
|
|
7
|
+
name: z.text(),
|
|
8
|
+
path: z.text(),
|
|
9
|
+
isLeaf: z.boolean(),
|
|
10
|
+
children: z.array(z.any()),
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
export type ParameterTreeNode = Static<typeof parameterTreeNodeSchema>;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { t } from "alepha";
|
|
2
1
|
import { parameters } from "../entities/parameters.ts";
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* Parameter name and version param schema.
|
|
6
|
-
* Uses
|
|
5
|
+
* Uses z.pick from entity for consistency.
|
|
7
6
|
*/
|
|
8
|
-
export const parameterVersionParamSchema =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
export const parameterVersionParamSchema = parameters.schema.pick({
|
|
8
|
+
name: true,
|
|
9
|
+
version: true,
|
|
10
|
+
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
import { parameterResponseSchema } from "./parameterResponseSchema.ts";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Parameter version response schema.
|
|
6
6
|
*/
|
|
7
|
-
export const parameterVersionResponseSchema =
|
|
8
|
-
parameter:
|
|
7
|
+
export const parameterVersionResponseSchema = z.object({
|
|
8
|
+
parameter: parameterResponseSchema.optional(),
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
export type ParameterVersionResponse = Static<
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Static,
|
|
1
|
+
import { type Static, z } from "alepha";
|
|
2
2
|
import { parameters } from "../entities/parameters.ts";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -7,13 +7,10 @@ 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 rollbackParameterBodySchema =
|
|
11
|
-
|
|
12
|
-
{
|
|
13
|
-
targetVersion:
|
|
14
|
-
|
|
15
|
-
}),
|
|
16
|
-
},
|
|
17
|
-
);
|
|
10
|
+
export const rollbackParameterBodySchema = parameters.schema
|
|
11
|
+
.pick({ changeDescription: true })
|
|
12
|
+
.extend({
|
|
13
|
+
targetVersion: z.integer().describe("Version number to rollback to"),
|
|
14
|
+
});
|
|
18
15
|
|
|
19
16
|
export type RollbackParameterBody = Static<typeof rollbackParameterBodySchema>;
|
|
@@ -6,13 +6,14 @@ import {
|
|
|
6
6
|
SchemaValidator,
|
|
7
7
|
type Static,
|
|
8
8
|
type TObject,
|
|
9
|
-
|
|
9
|
+
z,
|
|
10
10
|
} from "alepha";
|
|
11
11
|
import { CryptoProvider } from "alepha/crypto";
|
|
12
12
|
import { DateTimeProvider } from "alepha/datetime";
|
|
13
13
|
import { LockProvider } from "alepha/lock";
|
|
14
14
|
import { $logger } from "alepha/logger";
|
|
15
15
|
import { $repository, RepositoryProvider } from "alepha/orm";
|
|
16
|
+
import { currentTenantAtom, currentUserAtom } from "alepha/security";
|
|
16
17
|
import { $topic } from "alepha/topic";
|
|
17
18
|
import { type Parameter, parameters } from "../entities/parameters.ts";
|
|
18
19
|
import type { ParameterPrimitive } from "../primitives/$parameter.ts";
|
|
@@ -64,7 +65,35 @@ export class ParameterProvider {
|
|
|
64
65
|
protected _instanceId: string | undefined;
|
|
65
66
|
|
|
66
67
|
/**
|
|
67
|
-
*
|
|
68
|
+
* Resolve the active tenant for cache keying — MIRRORS the Repository's
|
|
69
|
+
* `resolveOrganizationValue` (tenant atom → user org) so the in-memory
|
|
70
|
+
* value caches partition exactly the way the DB rows do. Returns a sentinel
|
|
71
|
+
* for the org-less (single-tenant / no-request) case.
|
|
72
|
+
*
|
|
73
|
+
* Why this matters: the DB table is now org-scoped, but these process-global
|
|
74
|
+
* Maps are keyed by parameter NAME — without folding the org into the key, a
|
|
75
|
+
* pooled multi-tenant worker would hand org A's cached `club.settings` to a
|
|
76
|
+
* request for org B. (Cross-instance topic sync + the `ready` preload run
|
|
77
|
+
* with no request atom → the sentinel key; they refresh only org-less rows,
|
|
78
|
+
* leaving per-org caches to lazy-load + the immediate local update on `set`.
|
|
79
|
+
* That is bounded staleness, never a cross-tenant read.)
|
|
80
|
+
*/
|
|
81
|
+
protected orgKey(): string {
|
|
82
|
+
const tenant = this.alepha.store.get(currentTenantAtom);
|
|
83
|
+
if (tenant?.id) return tenant.id;
|
|
84
|
+
const user = this.alepha.store.get(currentUserAtom);
|
|
85
|
+
return user?.organization ?? "~global";
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Per-org cache key for the value caches (`${org}:${name}`). */
|
|
89
|
+
protected cacheKey(name: string): string {
|
|
90
|
+
return `${this.orgKey()}:${name}`;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* In-memory cache of registered parameter primitives. Keyed by NAME only —
|
|
95
|
+
* the `$parameter` definition (schema + default) is identical for every
|
|
96
|
+
* tenant; only the stored VALUE is per-org (see the value caches below).
|
|
68
97
|
*/
|
|
69
98
|
protected readonly primitives = new Map<string, ParameterPrimitive<any>>();
|
|
70
99
|
|
|
@@ -86,6 +115,33 @@ export class ParameterProvider {
|
|
|
86
115
|
*/
|
|
87
116
|
protected readonly loaded = new Set<string>();
|
|
88
117
|
|
|
118
|
+
/**
|
|
119
|
+
* Epoch millis of the last successful load (or local set) per cache key.
|
|
120
|
+
* Drives the serverless revalidation TTL (see `revalidateAfterMs`).
|
|
121
|
+
*/
|
|
122
|
+
protected readonly loadedAt = new Map<string, number>();
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* How long a cached value may serve before `get()` re-reads the DB.
|
|
126
|
+
*
|
|
127
|
+
* The in-memory caches are PER ISOLATE. On serverless runtimes
|
|
128
|
+
* (Cloudflare Workers) many isolates serve the same app and the
|
|
129
|
+
* cross-instance `syncTopic` rides the queue provider — in-memory by
|
|
130
|
+
* default, so a `set()` handled by one isolate never reaches the others:
|
|
131
|
+
* without a TTL they serve the stale value until they are recycled.
|
|
132
|
+
*
|
|
133
|
+
* Defaults: 30 s on serverless, 0 (= never revalidate, the historical
|
|
134
|
+
* behaviour) elsewhere. Override with the `PARAMETERS_CACHE_TTL_MS` env.
|
|
135
|
+
*/
|
|
136
|
+
protected get revalidateAfterMs(): number {
|
|
137
|
+
const raw = this.alepha.env.PARAMETERS_CACHE_TTL_MS as
|
|
138
|
+
| string
|
|
139
|
+
| number
|
|
140
|
+
| undefined;
|
|
141
|
+
if (raw !== undefined && raw !== "") return Number(raw);
|
|
142
|
+
return this.alepha.isServerless() ? 30_000 : 0;
|
|
143
|
+
}
|
|
144
|
+
|
|
89
145
|
/**
|
|
90
146
|
* Shared promises for deduplicating concurrent load() calls.
|
|
91
147
|
*/
|
|
@@ -137,9 +193,9 @@ export class ParameterProvider {
|
|
|
137
193
|
public readonly syncTopic = $topic({
|
|
138
194
|
name: "parameter:sync",
|
|
139
195
|
schema: {
|
|
140
|
-
payload:
|
|
141
|
-
name:
|
|
142
|
-
instanceId:
|
|
196
|
+
payload: z.object({
|
|
197
|
+
name: z.text(),
|
|
198
|
+
instanceId: z.text(),
|
|
143
199
|
}),
|
|
144
200
|
},
|
|
145
201
|
handler: async ({ payload }) => {
|
|
@@ -170,27 +226,28 @@ export class ParameterProvider {
|
|
|
170
226
|
* Checks if a cached next version has become current.
|
|
171
227
|
*/
|
|
172
228
|
public async get(name: string): Promise<unknown> {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
229
|
+
const ck = this.cacheKey(name);
|
|
230
|
+
if (!this.loaded.has(ck) || this.isStale(ck)) {
|
|
231
|
+
if (!this.loadPromises.has(ck)) {
|
|
232
|
+
this.loadPromises.set(ck, this.doLoad(name));
|
|
176
233
|
}
|
|
177
|
-
await this.loadPromises.get(
|
|
234
|
+
await this.loadPromises.get(ck);
|
|
178
235
|
}
|
|
179
236
|
|
|
180
237
|
// Check if cached next has become current
|
|
181
|
-
const cachedNext = this.cachedNext.get(
|
|
238
|
+
const cachedNext = this.cachedNext.get(ck);
|
|
182
239
|
if (cachedNext) {
|
|
183
240
|
const now = this.dateTimeProvider.now().toDate();
|
|
184
241
|
if (new Date(cachedNext.activationDate) <= now) {
|
|
185
|
-
this.cachedCurrent.set(
|
|
186
|
-
this.cachedNext.delete(
|
|
242
|
+
this.cachedCurrent.set(ck, cachedNext.content);
|
|
243
|
+
this.cachedNext.delete(ck);
|
|
187
244
|
this.reloadNextInBackground(name);
|
|
188
245
|
}
|
|
189
246
|
}
|
|
190
247
|
|
|
191
248
|
const param = this.primitives.get(name);
|
|
192
|
-
return this.cachedCurrent.has(
|
|
193
|
-
? this.cachedCurrent.get(
|
|
249
|
+
return this.cachedCurrent.has(ck)
|
|
250
|
+
? this.cachedCurrent.get(ck)
|
|
194
251
|
: param?.options.default;
|
|
195
252
|
}
|
|
196
253
|
|
|
@@ -213,19 +270,32 @@ export class ParameterProvider {
|
|
|
213
270
|
});
|
|
214
271
|
|
|
215
272
|
// Update local cache
|
|
273
|
+
const ck = this.cacheKey(name);
|
|
216
274
|
const now = this.dateTimeProvider.now().toDate();
|
|
217
275
|
if (!options.activationDate || options.activationDate <= now) {
|
|
218
|
-
const prev = this.cachedCurrent.get(
|
|
219
|
-
this.cachedCurrent.set(
|
|
276
|
+
const prev = this.cachedCurrent.get(ck);
|
|
277
|
+
this.cachedCurrent.set(ck, value);
|
|
220
278
|
if (JSON.stringify(prev) !== JSON.stringify(value)) {
|
|
221
279
|
this.notifySubscribers(name);
|
|
222
280
|
}
|
|
223
281
|
} else {
|
|
224
|
-
this.cachedNext.set(
|
|
282
|
+
this.cachedNext.set(ck, {
|
|
225
283
|
content: value,
|
|
226
284
|
activationDate: options.activationDate.toISOString(),
|
|
227
285
|
});
|
|
228
286
|
}
|
|
287
|
+
// The writer is by definition fresh — restart its revalidation window.
|
|
288
|
+
this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/** Whether the cached value outlived the revalidation TTL. */
|
|
292
|
+
protected isStale(ck: string): boolean {
|
|
293
|
+
const ttl = this.revalidateAfterMs;
|
|
294
|
+
if (ttl <= 0) return false;
|
|
295
|
+
const at = this.loadedAt.get(ck);
|
|
296
|
+
return at === undefined
|
|
297
|
+
? true
|
|
298
|
+
: this.dateTimeProvider.nowMillis() - at > ttl;
|
|
229
299
|
}
|
|
230
300
|
|
|
231
301
|
/**
|
|
@@ -233,12 +303,13 @@ export class ParameterProvider {
|
|
|
233
303
|
* Returns an unsubscribe function.
|
|
234
304
|
*/
|
|
235
305
|
public sub(name: string, fn: (v: unknown) => void): () => void {
|
|
236
|
-
|
|
237
|
-
|
|
306
|
+
const ck = this.cacheKey(name);
|
|
307
|
+
if (!this.subscribers.has(ck)) {
|
|
308
|
+
this.subscribers.set(ck, []);
|
|
238
309
|
}
|
|
239
|
-
this.subscribers.get(
|
|
310
|
+
this.subscribers.get(ck)!.push(fn);
|
|
240
311
|
return () => {
|
|
241
|
-
const subs = this.subscribers.get(
|
|
312
|
+
const subs = this.subscribers.get(ck);
|
|
242
313
|
if (subs) {
|
|
243
314
|
const idx = subs.indexOf(fn);
|
|
244
315
|
if (idx >= 0) {
|
|
@@ -253,8 +324,9 @@ export class ParameterProvider {
|
|
|
253
324
|
* Deduplicates concurrent calls via shared promise.
|
|
254
325
|
*/
|
|
255
326
|
public async load(name: string): Promise<void> {
|
|
256
|
-
|
|
257
|
-
|
|
327
|
+
const ck = this.cacheKey(name);
|
|
328
|
+
this.loadPromises.set(ck, this.doLoad(name));
|
|
329
|
+
await this.loadPromises.get(ck);
|
|
258
330
|
}
|
|
259
331
|
|
|
260
332
|
/**
|
|
@@ -262,8 +334,9 @@ export class ParameterProvider {
|
|
|
262
334
|
* Synchronous access for admin API.
|
|
263
335
|
*/
|
|
264
336
|
public getCachedCurrentContent(name: string): unknown {
|
|
265
|
-
|
|
266
|
-
|
|
337
|
+
const ck = this.cacheKey(name);
|
|
338
|
+
if (this.cachedCurrent.has(ck)) {
|
|
339
|
+
return this.cachedCurrent.get(ck);
|
|
267
340
|
}
|
|
268
341
|
const param = this.primitives.get(name);
|
|
269
342
|
return param?.options.default;
|
|
@@ -273,7 +346,7 @@ export class ParameterProvider {
|
|
|
273
346
|
* Whether the parameter is using its default value (no DB value loaded).
|
|
274
347
|
*/
|
|
275
348
|
public isUsingDefault(name: string): boolean {
|
|
276
|
-
return !this.cachedCurrent.has(name);
|
|
349
|
+
return !this.cachedCurrent.has(this.cacheKey(name));
|
|
277
350
|
}
|
|
278
351
|
|
|
279
352
|
// ---------------------------------------------------------------------------
|
|
@@ -510,12 +583,7 @@ export class ParameterProvider {
|
|
|
510
583
|
*/
|
|
511
584
|
public async delete(name: string): Promise<void> {
|
|
512
585
|
await this.repo.deleteMany({ name: { eq: name } });
|
|
513
|
-
this.
|
|
514
|
-
this.cachedNext.delete(name);
|
|
515
|
-
this.loaded.delete(name);
|
|
516
|
-
this.loadPromises.delete(name);
|
|
517
|
-
this.loadGeneration.delete(name);
|
|
518
|
-
this.migrationChecked.delete(name);
|
|
586
|
+
this.evictCaches(name);
|
|
519
587
|
this.log.info("Parameter deleted", { name });
|
|
520
588
|
}
|
|
521
589
|
|
|
@@ -526,17 +594,23 @@ export class ParameterProvider {
|
|
|
526
594
|
if (names.length === 0) return [];
|
|
527
595
|
await this.repo.deleteMany({ name: { inArray: names } });
|
|
528
596
|
for (const name of names) {
|
|
529
|
-
this.
|
|
530
|
-
this.cachedNext.delete(name);
|
|
531
|
-
this.loaded.delete(name);
|
|
532
|
-
this.loadPromises.delete(name);
|
|
533
|
-
this.loadGeneration.delete(name);
|
|
534
|
-
this.migrationChecked.delete(name);
|
|
597
|
+
this.evictCaches(name);
|
|
535
598
|
}
|
|
536
599
|
this.log.info("Parameters deleted", { count: names.length });
|
|
537
600
|
return names;
|
|
538
601
|
}
|
|
539
602
|
|
|
603
|
+
/** Drop every per-org value cache entry for `name` in the active org. */
|
|
604
|
+
protected evictCaches(name: string): void {
|
|
605
|
+
const ck = this.cacheKey(name);
|
|
606
|
+
this.cachedCurrent.delete(ck);
|
|
607
|
+
this.cachedNext.delete(ck);
|
|
608
|
+
this.loaded.delete(ck);
|
|
609
|
+
this.loadPromises.delete(ck);
|
|
610
|
+
this.loadGeneration.delete(ck);
|
|
611
|
+
this.migrationChecked.delete(ck);
|
|
612
|
+
}
|
|
613
|
+
|
|
540
614
|
/**
|
|
541
615
|
* Get a specific version of a parameter.
|
|
542
616
|
*/
|
|
@@ -608,7 +682,7 @@ export class ParameterProvider {
|
|
|
608
682
|
next: ParameterWithStatus | null;
|
|
609
683
|
defaultValue: unknown | null;
|
|
610
684
|
currentValue: unknown | null;
|
|
611
|
-
schema:
|
|
685
|
+
schema: Record<string, unknown> | null;
|
|
612
686
|
}> {
|
|
613
687
|
let { current, next } = await this.loadCurrentAndNext(name);
|
|
614
688
|
|
|
@@ -640,7 +714,13 @@ export class ParameterProvider {
|
|
|
640
714
|
|
|
641
715
|
const defaultValue = param?.options.default ?? null;
|
|
642
716
|
const currentValue = this.getCachedCurrentContent(name) ?? null;
|
|
643
|
-
|
|
717
|
+
// Serialize the Zod schema to JSON Schema for transport. `param.schema` is a
|
|
718
|
+
// live `ZodObject` instance, not a plain record, so it fails the response's
|
|
719
|
+
// `z.json()` validation ("expected record, received ZodObject") and the
|
|
720
|
+
// admin UI (which round-trips via `jsonSchemaToZod`) can't rebuild a form
|
|
721
|
+
// from it. Typebox schemas were already JSON Schema, hence this step was
|
|
722
|
+
// implicit before the Zod migration.
|
|
723
|
+
const schema = param?.schema ? z.toJSONSchema(param.schema) : null;
|
|
644
724
|
|
|
645
725
|
return {
|
|
646
726
|
current: current ? { ...current, status: "current" as const } : null,
|
|
@@ -684,18 +764,21 @@ export class ParameterProvider {
|
|
|
684
764
|
* Fetches current and next from database, updates cache.
|
|
685
765
|
*/
|
|
686
766
|
protected async doLoad(name: string): Promise<void> {
|
|
687
|
-
|
|
688
|
-
|
|
767
|
+
// Snapshot the org-scoped cache key at call time: the whole load runs in
|
|
768
|
+
// one request context, so the atom (hence `ck`) is stable here.
|
|
769
|
+
const ck = this.cacheKey(name);
|
|
770
|
+
const gen = (this.loadGeneration.get(ck) ?? 0) + 1;
|
|
771
|
+
this.loadGeneration.set(ck, gen);
|
|
689
772
|
|
|
690
773
|
const { current, next } = await this.loadCurrentAndNext(name);
|
|
691
774
|
const schemaHash = this.schemaHashes.get(name) ?? "";
|
|
692
775
|
|
|
693
776
|
// Superseded by a newer load — discard results
|
|
694
|
-
if (this.loadGeneration.get(
|
|
777
|
+
if (this.loadGeneration.get(ck) !== gen) return;
|
|
695
778
|
|
|
696
779
|
// Check if migration is needed
|
|
697
|
-
if (current && !this.migrationChecked.has(
|
|
698
|
-
this.migrationChecked.add(
|
|
780
|
+
if (current && !this.migrationChecked.has(ck)) {
|
|
781
|
+
this.migrationChecked.add(ck);
|
|
699
782
|
const migration = this.migrateValue(
|
|
700
783
|
name,
|
|
701
784
|
current.content,
|
|
@@ -717,46 +800,48 @@ export class ParameterProvider {
|
|
|
717
800
|
// Reload after migration to get the new current
|
|
718
801
|
const updated = await this.loadCurrentAndNext(name);
|
|
719
802
|
if (updated.current) {
|
|
720
|
-
this.cachedCurrent.set(
|
|
803
|
+
this.cachedCurrent.set(ck, updated.current.content);
|
|
721
804
|
} else {
|
|
722
|
-
this.cachedCurrent.delete(
|
|
805
|
+
this.cachedCurrent.delete(ck);
|
|
723
806
|
}
|
|
724
807
|
if (updated.next) {
|
|
725
|
-
this.cachedNext.set(
|
|
808
|
+
this.cachedNext.set(ck, {
|
|
726
809
|
content: updated.next.content,
|
|
727
810
|
activationDate: updated.next.activationDate,
|
|
728
811
|
});
|
|
729
812
|
} else {
|
|
730
|
-
this.cachedNext.delete(
|
|
813
|
+
this.cachedNext.delete(ck);
|
|
731
814
|
}
|
|
732
|
-
this.loaded.add(
|
|
733
|
-
this.
|
|
815
|
+
this.loaded.add(ck);
|
|
816
|
+
this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
|
|
817
|
+
this.loadPromises.delete(ck);
|
|
734
818
|
this.notifySubscribers(name);
|
|
735
819
|
return;
|
|
736
820
|
}
|
|
737
821
|
}
|
|
738
822
|
|
|
739
|
-
const prev = this.cachedCurrent.get(
|
|
740
|
-
const hadPrev = this.cachedCurrent.has(
|
|
823
|
+
const prev = this.cachedCurrent.get(ck);
|
|
824
|
+
const hadPrev = this.cachedCurrent.has(ck);
|
|
741
825
|
if (current) {
|
|
742
|
-
this.cachedCurrent.set(
|
|
826
|
+
this.cachedCurrent.set(ck, current.content);
|
|
743
827
|
} else {
|
|
744
|
-
this.cachedCurrent.delete(
|
|
828
|
+
this.cachedCurrent.delete(ck);
|
|
745
829
|
}
|
|
746
830
|
if (next) {
|
|
747
|
-
this.cachedNext.set(
|
|
831
|
+
this.cachedNext.set(ck, {
|
|
748
832
|
content: next.content,
|
|
749
833
|
activationDate: next.activationDate,
|
|
750
834
|
});
|
|
751
835
|
} else {
|
|
752
|
-
this.cachedNext.delete(
|
|
836
|
+
this.cachedNext.delete(ck);
|
|
753
837
|
}
|
|
754
|
-
this.loaded.add(
|
|
755
|
-
this.
|
|
838
|
+
this.loaded.add(ck);
|
|
839
|
+
this.loadedAt.set(ck, this.dateTimeProvider.nowMillis());
|
|
840
|
+
this.loadPromises.delete(ck);
|
|
756
841
|
|
|
757
842
|
if (
|
|
758
843
|
hadPrev &&
|
|
759
|
-
JSON.stringify(prev) !== JSON.stringify(this.cachedCurrent.get(
|
|
844
|
+
JSON.stringify(prev) !== JSON.stringify(this.cachedCurrent.get(ck))
|
|
760
845
|
) {
|
|
761
846
|
this.notifySubscribers(name);
|
|
762
847
|
}
|
|
@@ -905,15 +990,16 @@ export class ParameterProvider {
|
|
|
905
990
|
* Reload next version info in background (non-blocking).
|
|
906
991
|
*/
|
|
907
992
|
protected reloadNextInBackground(name: string): void {
|
|
993
|
+
const ck = this.cacheKey(name);
|
|
908
994
|
this.loadCurrentAndNext(name)
|
|
909
995
|
.then(({ next }) => {
|
|
910
996
|
if (next) {
|
|
911
|
-
this.cachedNext.set(
|
|
997
|
+
this.cachedNext.set(ck, {
|
|
912
998
|
content: next.content,
|
|
913
999
|
activationDate: next.activationDate,
|
|
914
1000
|
});
|
|
915
1001
|
} else {
|
|
916
|
-
this.cachedNext.delete(
|
|
1002
|
+
this.cachedNext.delete(ck);
|
|
917
1003
|
}
|
|
918
1004
|
})
|
|
919
1005
|
.catch((err) => {
|
|
@@ -928,11 +1014,12 @@ export class ParameterProvider {
|
|
|
928
1014
|
* Notify all subscribers of a value change.
|
|
929
1015
|
*/
|
|
930
1016
|
protected notifySubscribers(name: string): void {
|
|
931
|
-
const
|
|
1017
|
+
const ck = this.cacheKey(name);
|
|
1018
|
+
const subs = this.subscribers.get(ck);
|
|
932
1019
|
if (!subs) return;
|
|
933
1020
|
const param = this.primitives.get(name);
|
|
934
|
-
const value = this.cachedCurrent.has(
|
|
935
|
-
? this.cachedCurrent.get(
|
|
1021
|
+
const value = this.cachedCurrent.has(ck)
|
|
1022
|
+
? this.cachedCurrent.get(ck)
|
|
936
1023
|
: param?.options.default;
|
|
937
1024
|
for (const fn of subs) {
|
|
938
1025
|
fn(value);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $inject,
|
|
1
|
+
import { $inject, z } from "alepha";
|
|
2
2
|
import { $secure } from "alepha/security";
|
|
3
3
|
import { $action, okSchema } from "alepha/server";
|
|
4
4
|
import {
|
|
@@ -26,7 +26,7 @@ export class AdminPaymentController {
|
|
|
26
26
|
description: "List payment intents",
|
|
27
27
|
schema: {
|
|
28
28
|
query: intentQuerySchema,
|
|
29
|
-
response:
|
|
29
|
+
response: z.page(intentResourceSchema),
|
|
30
30
|
},
|
|
31
31
|
handler: ({ query }) => this.payments.findIntents(query),
|
|
32
32
|
});
|
|
@@ -40,7 +40,7 @@ export class AdminPaymentController {
|
|
|
40
40
|
use: [$secure({ permissions: ["payments:read"] })],
|
|
41
41
|
description: "Get payment intent details",
|
|
42
42
|
schema: {
|
|
43
|
-
params:
|
|
43
|
+
params: z.object({ id: z.uuid() }),
|
|
44
44
|
response: intentResourceSchema,
|
|
45
45
|
},
|
|
46
46
|
handler: ({ params }) => this.payments.getIntent(params.id),
|
|
@@ -56,7 +56,7 @@ export class AdminPaymentController {
|
|
|
56
56
|
use: [$secure({ permissions: ["payments:write"] })],
|
|
57
57
|
description: "Capture an authorized payment intent",
|
|
58
58
|
schema: {
|
|
59
|
-
params:
|
|
59
|
+
params: z.object({ id: z.uuid() }),
|
|
60
60
|
body: captureIntentSchema,
|
|
61
61
|
response: intentResourceSchema,
|
|
62
62
|
},
|
|
@@ -74,7 +74,7 @@ export class AdminPaymentController {
|
|
|
74
74
|
use: [$secure({ permissions: ["payments:write"] })],
|
|
75
75
|
description: "Void an authorized payment intent",
|
|
76
76
|
schema: {
|
|
77
|
-
params:
|
|
77
|
+
params: z.object({ id: z.uuid() }),
|
|
78
78
|
response: intentResourceSchema,
|
|
79
79
|
},
|
|
80
80
|
handler: ({ params }) => this.payments.void(params.id),
|
|
@@ -90,7 +90,7 @@ export class AdminPaymentController {
|
|
|
90
90
|
use: [$secure({ permissions: ["payments:write"] })],
|
|
91
91
|
description: "Issue partial or full refund",
|
|
92
92
|
schema: {
|
|
93
|
-
params:
|
|
93
|
+
params: z.object({ id: z.uuid() }),
|
|
94
94
|
body: refundIntentSchema,
|
|
95
95
|
response: refundResourceSchema,
|
|
96
96
|
},
|
|
@@ -108,7 +108,7 @@ export class AdminPaymentController {
|
|
|
108
108
|
use: [$secure({ permissions: ["payments:write"] })],
|
|
109
109
|
description: "Cancel a created payment intent",
|
|
110
110
|
schema: {
|
|
111
|
-
params:
|
|
111
|
+
params: z.object({ id: z.uuid() }),
|
|
112
112
|
response: intentResourceSchema,
|
|
113
113
|
},
|
|
114
114
|
handler: ({ params }) => this.payments.cancel(params.id),
|