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,4 +1,4 @@
|
|
|
1
|
-
import { $inject,
|
|
1
|
+
import { $inject, z } from "alepha";
|
|
2
2
|
import { $command } from "alepha/command";
|
|
3
3
|
import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
|
|
4
4
|
import { ProjectScaffolder } from "../services/ProjectScaffolder.ts";
|
|
@@ -11,28 +11,25 @@ export class TestCommand {
|
|
|
11
11
|
name: "test",
|
|
12
12
|
description:
|
|
13
13
|
"Run tests using Vitest. Pass a filter to run only matching specs, e.g. `alepha test user` or `alepha test test/auth.spec.ts`",
|
|
14
|
-
args:
|
|
15
|
-
|
|
14
|
+
args: z
|
|
15
|
+
.text({
|
|
16
16
|
title: "filter",
|
|
17
17
|
description: "Only run spec files whose path matches this string",
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
flags:
|
|
21
|
-
config:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
),
|
|
18
|
+
})
|
|
19
|
+
.optional(),
|
|
20
|
+
flags: z.object({
|
|
21
|
+
config: z
|
|
22
|
+
.string()
|
|
23
|
+
.meta({ alias: "c" })
|
|
24
|
+
.describe("Path to Vitest config file")
|
|
25
|
+
.optional(),
|
|
27
26
|
}),
|
|
28
|
-
env:
|
|
29
|
-
VITEST_ARGS:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}),
|
|
35
|
-
),
|
|
27
|
+
env: z.object({
|
|
28
|
+
VITEST_ARGS: z
|
|
29
|
+
.string()
|
|
30
|
+
.describe("Additional arguments to pass to Vitest. E.g., --coverage")
|
|
31
|
+
.default("")
|
|
32
|
+
.optional(),
|
|
36
33
|
}),
|
|
37
34
|
handler: async ({ run, root, flags, env, args }) => {
|
|
38
35
|
await this.scaffolder.ensureConfig(root, {
|
package/src/cli/core/index.ts
CHANGED
|
@@ -34,7 +34,6 @@ import { BuildCompressTask } from "./tasks/BuildCompressTask.ts";
|
|
|
34
34
|
import { BuildDockerTask } from "./tasks/BuildDockerTask.ts";
|
|
35
35
|
import { BuildPrerenderTask } from "./tasks/BuildPrerenderTask.ts";
|
|
36
36
|
import { BuildServerTask } from "./tasks/BuildServerTask.ts";
|
|
37
|
-
import { BuildSitemapTask } from "./tasks/BuildSitemapTask.ts";
|
|
38
37
|
import { BuildStaticTask } from "./tasks/BuildStaticTask.ts";
|
|
39
38
|
import { BuildVercelTask } from "./tasks/BuildVercelTask.ts";
|
|
40
39
|
|
|
@@ -74,7 +73,6 @@ export * from "./tasks/BuildCompressTask.ts";
|
|
|
74
73
|
export * from "./tasks/BuildDockerTask.ts";
|
|
75
74
|
export * from "./tasks/BuildPrerenderTask.ts";
|
|
76
75
|
export * from "./tasks/BuildServerTask.ts";
|
|
77
|
-
export * from "./tasks/BuildSitemapTask.ts";
|
|
78
76
|
export * from "./tasks/BuildStaticTask.ts";
|
|
79
77
|
export * from "./tasks/BuildTask.ts";
|
|
80
78
|
export * from "./tasks/BuildVercelTask.ts";
|
|
@@ -132,7 +130,6 @@ export const AlephaCli = $module({
|
|
|
132
130
|
BuildDockerTask,
|
|
133
131
|
BuildPrerenderTask,
|
|
134
132
|
BuildServerTask,
|
|
135
|
-
BuildSitemapTask,
|
|
136
133
|
BuildStaticTask,
|
|
137
134
|
BuildVercelTask,
|
|
138
135
|
],
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
2
|
import { $inject } from "alepha";
|
|
3
3
|
import { KV_DEFAULT_BINDING } from "alepha/cache";
|
|
4
|
-
import type { ContainerPrimitive } from "alepha/container";
|
|
5
4
|
import { SEND_EMAIL_DEFAULT_BINDING } from "alepha/email/cloudflare";
|
|
6
|
-
import { QUEUE_DEFAULT_BINDING } from "alepha/queue";
|
|
5
|
+
import { QUEUE_DEFAULT_BINDING, QUEUE_DEFAULT_MAX_RETRIES } from "alepha/queue";
|
|
7
6
|
import type { CronProvider, WorkerdCronProvider } from "alepha/scheduler";
|
|
8
7
|
import { FileSystemProvider } from "alepha/system";
|
|
9
8
|
import { ViteUtils } from "../services/ViteUtils.ts";
|
|
@@ -16,6 +15,16 @@ import { BuildTask, type BuildTaskContext } from "./BuildTask.ts";
|
|
|
16
15
|
// here wouldn't match the one the workspace registered.
|
|
17
16
|
const CLOUDFLARE_EMAIL_PROVIDER_NAME = "CloudflareEmailProvider";
|
|
18
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Best-effort Cloudflare zone (registrable domain) for a wildcard Worker route:
|
|
20
|
+
* strip the leading `*.` and any subdomain labels, keep the last two — e.g.
|
|
21
|
+
* `*.club.alepha.dev` → `alepha.dev`, `*.alepha.club` → `alepha.club`. Correct
|
|
22
|
+
* for single-label TLDs (the common case); a multi-label public suffix
|
|
23
|
+
* (`.co.uk`) or a CF subdomain zone needs an explicit `CLOUDFLARE_ZONE`.
|
|
24
|
+
*/
|
|
25
|
+
const deriveZone = (domain: string): string =>
|
|
26
|
+
domain.replace(/^\*\./, "").split(".").slice(-2).join(".");
|
|
27
|
+
|
|
19
28
|
interface WranglerConfig {
|
|
20
29
|
[key: string]: any;
|
|
21
30
|
}
|
|
@@ -75,20 +84,13 @@ export interface BuildManifest {
|
|
|
75
84
|
*/
|
|
76
85
|
crons: string[];
|
|
77
86
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
87
|
+
* Cloudflare email binding, captured when the app registers
|
|
88
|
+
* `CloudflareEmailProvider` at artifact-build time. The prebuilt/manifest
|
|
89
|
+
* deploy path (Alepha Rocket `--prebuilt`) has no Vite introspection, so it
|
|
90
|
+
* reads this to re-emit the `send_email` wrangler binding. Absent when the
|
|
91
|
+
* app doesn't use Cloudflare email.
|
|
82
92
|
*/
|
|
83
|
-
|
|
84
|
-
name: string;
|
|
85
|
-
className: string;
|
|
86
|
-
image: string;
|
|
87
|
-
port: number;
|
|
88
|
-
sleepAfter: string;
|
|
89
|
-
instanceType: string;
|
|
90
|
-
maxInstances: number;
|
|
91
|
-
}>;
|
|
93
|
+
email?: { binding: string };
|
|
92
94
|
/**
|
|
93
95
|
* Every env var the app declares via `$env`, captured from
|
|
94
96
|
* `alepha.dump().env` at build time. The deploy `secrets` step uses this
|
|
@@ -176,13 +178,13 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
176
178
|
};
|
|
177
179
|
|
|
178
180
|
this.enhanceDomain(wrangler);
|
|
181
|
+
this.enhanceServices(wrangler);
|
|
179
182
|
this.enhanceCron(ctx, wrangler);
|
|
180
183
|
this.enhanceDatabase(wrangler);
|
|
181
184
|
this.enhanceR2(wrangler);
|
|
182
185
|
this.enhanceKV(wrangler);
|
|
183
186
|
this.enhanceQueue(wrangler);
|
|
184
187
|
this.enhanceEmail(ctx, wrangler);
|
|
185
|
-
const containers = this.enhanceContainers(ctx, wrangler);
|
|
186
188
|
|
|
187
189
|
await this.fs.writeFile(
|
|
188
190
|
this.fs.join(root, distDir, "wrangler.jsonc"),
|
|
@@ -194,9 +196,9 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
194
196
|
// re-emitting the same data we just read — skip to avoid a redundant
|
|
195
197
|
// write and to keep the original manifest as the canonical record.
|
|
196
198
|
if (!ctx.manifest) {
|
|
197
|
-
await this.writeManifest(ctx, root, distDir, name
|
|
199
|
+
await this.writeManifest(ctx, root, distDir, name);
|
|
198
200
|
}
|
|
199
|
-
await this.writeWorkerEntryPoint(root, distDir
|
|
201
|
+
await this.writeWorkerEntryPoint(root, distDir);
|
|
200
202
|
}
|
|
201
203
|
|
|
202
204
|
/**
|
|
@@ -211,7 +213,6 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
211
213
|
root: string,
|
|
212
214
|
distDir: string,
|
|
213
215
|
name: string,
|
|
214
|
-
containers: ContainerDescriptor[],
|
|
215
216
|
): Promise<void> {
|
|
216
217
|
// Discover the same primitive shapes the enhance* methods read.
|
|
217
218
|
// Errors are silently swallowed — an absent primitive class just
|
|
@@ -279,6 +280,14 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
279
280
|
env = Object.keys(ctx.alepha.dump().env).sort();
|
|
280
281
|
} catch {}
|
|
281
282
|
|
|
283
|
+
// Capture the CF email binding so manifest-mode deploys (Rocket) can
|
|
284
|
+
// re-emit `send_email` — `enhanceEmail` can't introspect there.
|
|
285
|
+
let email: BuildManifest["email"];
|
|
286
|
+
try {
|
|
287
|
+
ctx.alepha.inject(CLOUDFLARE_EMAIL_PROVIDER_NAME);
|
|
288
|
+
email = { binding: SEND_EMAIL_DEFAULT_BINDING };
|
|
289
|
+
} catch {}
|
|
290
|
+
|
|
282
291
|
const manifest: BuildManifest = {
|
|
283
292
|
version: 1,
|
|
284
293
|
project: name,
|
|
@@ -293,15 +302,7 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
293
302
|
hasCron: crons.length > 0,
|
|
294
303
|
},
|
|
295
304
|
crons,
|
|
296
|
-
|
|
297
|
-
name: c.name,
|
|
298
|
-
className: c.className,
|
|
299
|
-
image: c.image,
|
|
300
|
-
port: c.port,
|
|
301
|
-
sleepAfter: c.sleepAfter,
|
|
302
|
-
instanceType: c.instanceType,
|
|
303
|
-
maxInstances: c.maxInstances,
|
|
304
|
-
})),
|
|
305
|
+
email,
|
|
305
306
|
env,
|
|
306
307
|
};
|
|
307
308
|
|
|
@@ -311,6 +312,21 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
311
312
|
);
|
|
312
313
|
}
|
|
313
314
|
|
|
315
|
+
/** Worker-to-worker service bindings, from CLOUDFLARE_SERVICES (JSON). */
|
|
316
|
+
protected enhanceServices(wrangler: WranglerConfig): void {
|
|
317
|
+
const raw = process.env.CLOUDFLARE_SERVICES;
|
|
318
|
+
if (!raw) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
const services = JSON.parse(raw) as Array<{
|
|
322
|
+
binding: string;
|
|
323
|
+
service: string;
|
|
324
|
+
}>;
|
|
325
|
+
if (services.length > 0) {
|
|
326
|
+
(wrangler as { services?: unknown }).services = services;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
314
330
|
protected enhanceDomain(wrangler: WranglerConfig): void {
|
|
315
331
|
const domain = process.env.CLOUDFLARE_DOMAIN;
|
|
316
332
|
if (!domain) {
|
|
@@ -318,12 +334,13 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
318
334
|
}
|
|
319
335
|
|
|
320
336
|
if (domain.includes("*")) {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
337
|
+
// A wildcard is a Worker *Route* (not a Custom Domain), and the CF API
|
|
338
|
+
// keys routes by zone. Default the zone to the registrable domain — the
|
|
339
|
+
// last two labels of the wildcard host (`*.club.alepha.dev` → `alepha.dev`,
|
|
340
|
+
// `*.alepha.club` → `alepha.club`). Set CLOUDFLARE_ZONE explicitly only to
|
|
341
|
+
// override (a subdomain zone, or a multi-label public suffix like `.co.uk`
|
|
342
|
+
// where "last two labels" is wrong).
|
|
343
|
+
const zone = process.env.CLOUDFLARE_ZONE || deriveZone(domain);
|
|
327
344
|
wrangler.routes = [
|
|
328
345
|
{
|
|
329
346
|
pattern: domain.endsWith("/*") ? domain : `${domain}/*`,
|
|
@@ -333,6 +350,22 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
333
350
|
return;
|
|
334
351
|
}
|
|
335
352
|
|
|
353
|
+
// An explicit CLOUDFLARE_ZONE forces a zone *Route* for a non-wildcard
|
|
354
|
+
// host too. Needed when the host is ALSO covered by another Worker's
|
|
355
|
+
// wildcard route on the same zone: Cloudflare evaluates Routes before
|
|
356
|
+
// Custom Domains, but among routes the most specific pattern wins — so
|
|
357
|
+
// `app.club.alepha.dev/*` beats the pooled `*.club.alepha.dev/*`, while a
|
|
358
|
+
// Custom Domain on that host would lose to the wildcard route entirely.
|
|
359
|
+
if (process.env.CLOUDFLARE_ZONE) {
|
|
360
|
+
wrangler.routes = [
|
|
361
|
+
{
|
|
362
|
+
pattern: `${domain}/*`,
|
|
363
|
+
zone_name: process.env.CLOUDFLARE_ZONE,
|
|
364
|
+
},
|
|
365
|
+
];
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
|
|
336
369
|
wrangler.routes = [
|
|
337
370
|
{
|
|
338
371
|
pattern: domain,
|
|
@@ -386,13 +419,15 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
386
419
|
|
|
387
420
|
const [dbName, id] = url.replace("d1://", "").replace("d1:", "").split(":");
|
|
388
421
|
const binding = BuildCloudflareTask.D1_BINDING;
|
|
389
|
-
|
|
422
|
+
// No `jurisdiction` here: unlike r2_buckets, the wrangler D1 binding schema
|
|
423
|
+
// has no jurisdiction field (it warns on the unexpected key). D1 data
|
|
424
|
+
// residency is fixed when the database is created — see CloudflareApi —
|
|
425
|
+
// and the binding just references it by `database_id`.
|
|
390
426
|
wrangler.d1_databases = wrangler.d1_databases || [];
|
|
391
427
|
wrangler.d1_databases.push({
|
|
392
428
|
binding,
|
|
393
429
|
database_name: dbName,
|
|
394
430
|
database_id: id,
|
|
395
|
-
...(jurisdiction ? { jurisdiction } : {}),
|
|
396
431
|
});
|
|
397
432
|
wrangler.vars ??= {};
|
|
398
433
|
wrangler.vars.DATABASE_URL = `d1://${binding}`;
|
|
@@ -462,9 +497,22 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
462
497
|
binding: QUEUE_DEFAULT_BINDING,
|
|
463
498
|
queue: queueName,
|
|
464
499
|
});
|
|
500
|
+
|
|
501
|
+
// The worker's queue handler calls `msg.retry()` on any throw. Cloudflare
|
|
502
|
+
// only gives a failing message somewhere to land if the consumer declares a
|
|
503
|
+
// `dead_letter_queue` — otherwise it burns `max_retries` and DISCARDS the
|
|
504
|
+
// message, with no record and no signal. CF creates the DLQ on demand, so a
|
|
505
|
+
// derived default is safe.
|
|
506
|
+
const maxRetries = Number(process.env.CLOUDFLARE_QUEUE_MAX_RETRIES);
|
|
507
|
+
|
|
465
508
|
wrangler.queues.consumers = wrangler.queues.consumers || [];
|
|
466
509
|
wrangler.queues.consumers.push({
|
|
467
510
|
queue: queueName,
|
|
511
|
+
dead_letter_queue:
|
|
512
|
+
process.env.CLOUDFLARE_QUEUE_DLQ_NAME || `${queueName}-dlq`,
|
|
513
|
+
max_retries: Number.isSafeInteger(maxRetries)
|
|
514
|
+
? maxRetries
|
|
515
|
+
: QUEUE_DEFAULT_MAX_RETRIES,
|
|
468
516
|
});
|
|
469
517
|
}
|
|
470
518
|
|
|
@@ -472,25 +520,30 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
472
520
|
ctx: BuildTaskContext,
|
|
473
521
|
wrangler: WranglerConfig,
|
|
474
522
|
): void {
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
478
|
-
//
|
|
479
|
-
|
|
480
|
-
|
|
523
|
+
// Resolve the CF email binding from whichever source this build path has:
|
|
524
|
+
// - manifest/prebuilt mode (Alepha Rocket `--prebuilt`): no app boot, so
|
|
525
|
+
// read the binding captured into the manifest at artifact-build time.
|
|
526
|
+
// Without this the deploy silently drops `send_email` and the worker
|
|
527
|
+
// boots with email inert (binding not found).
|
|
528
|
+
// - full Vite introspection (`ctx.alepha`, no manifest): probe for the
|
|
529
|
+
// registered CloudflareEmailProvider.
|
|
530
|
+
let binding: string | undefined;
|
|
531
|
+
if (ctx.manifest) {
|
|
532
|
+
binding = ctx.manifest.email?.binding;
|
|
533
|
+
} else if (ctx.alepha) {
|
|
534
|
+
try {
|
|
535
|
+
ctx.alepha.inject(CLOUDFLARE_EMAIL_PROVIDER_NAME);
|
|
536
|
+
binding = SEND_EMAIL_DEFAULT_BINDING;
|
|
537
|
+
} catch {
|
|
538
|
+
// app doesn't use CloudflareEmailProvider — nothing to emit
|
|
539
|
+
}
|
|
481
540
|
}
|
|
482
|
-
|
|
483
|
-
ctx.alepha.inject(CLOUDFLARE_EMAIL_PROVIDER_NAME);
|
|
484
|
-
} catch {
|
|
541
|
+
if (!binding) {
|
|
485
542
|
return;
|
|
486
543
|
}
|
|
487
544
|
|
|
488
545
|
wrangler.send_email = wrangler.send_email || [];
|
|
489
|
-
if (
|
|
490
|
-
wrangler.send_email.some(
|
|
491
|
-
(b: { name: string }) => b.name === SEND_EMAIL_DEFAULT_BINDING,
|
|
492
|
-
)
|
|
493
|
-
) {
|
|
546
|
+
if (wrangler.send_email.some((b: { name: string }) => b.name === binding)) {
|
|
494
547
|
return;
|
|
495
548
|
}
|
|
496
549
|
|
|
@@ -504,171 +557,31 @@ export class BuildCloudflareTask extends BuildTask {
|
|
|
504
557
|
// sender goes in the message `from` field (see CloudflareEmailProvider.send);
|
|
505
558
|
// leaving the binding unrestricted lets the worker send to any verified
|
|
506
559
|
// destination.
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
wrangler.send_email.push(entry);
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
/**
|
|
513
|
-
* Discover `$container` primitives and emit the matching Cloudflare
|
|
514
|
-
* Containers bindings, Durable Object bindings, and migrations into
|
|
515
|
-
* `wrangler.jsonc`. The DO class declarations are added later, when
|
|
516
|
-
* the worker entry point is written.
|
|
517
|
-
*
|
|
518
|
-
* Returns the list of container descriptors so
|
|
519
|
-
* `writeWorkerEntryPoint` can emit `export class <NAME> extends
|
|
520
|
-
* Container` declarations referencing them.
|
|
521
|
-
*/
|
|
522
|
-
protected discoverContainers(ctx: BuildTaskContext): ContainerDescriptor[] {
|
|
523
|
-
// String key, not the `$container` factory. The build task runs in
|
|
524
|
-
// the CLI's Node realm, while the workspace's entry module is
|
|
525
|
-
// loaded by Vite — two separate module copies of
|
|
526
|
-
// `alepha/container`. Looking up by `$container[KIND]` (a class
|
|
527
|
-
// reference) would dereference the CLI's ContainerPrimitive class,
|
|
528
|
-
// which never matches the workspace's. The string form iterates
|
|
529
|
-
// the registry by class name and survives the dual-realm — same
|
|
530
|
-
// pattern used for `$bucket`, `$queue`, `scheduler` below.
|
|
531
|
-
const primitives = ctx.alepha.primitives(
|
|
532
|
-
"container",
|
|
533
|
-
) as ContainerPrimitive[];
|
|
534
|
-
return primitives.map((p) => ({
|
|
535
|
-
name: p.name.toUpperCase(),
|
|
536
|
-
className: p.name
|
|
537
|
-
.split(/[^a-zA-Z0-9]/)
|
|
538
|
-
.filter(Boolean)
|
|
539
|
-
.map((s) => s[0]!.toUpperCase() + s.slice(1))
|
|
540
|
-
.join(""),
|
|
541
|
-
image: p.options.image,
|
|
542
|
-
port: p.options.port ?? 3000,
|
|
543
|
-
sleepAfter:
|
|
544
|
-
typeof p.options.sleepAfter === "string" ? p.options.sleepAfter : "15m",
|
|
545
|
-
// `lite` is the post-GA name for what `$container` historically
|
|
546
|
-
// called `dev`. Default to `lite` here and rewrite any
|
|
547
|
-
// explicit `dev` to it on the way out — wrangler warns
|
|
548
|
-
// otherwise.
|
|
549
|
-
instanceType:
|
|
550
|
-
p.options.instanceType === "dev"
|
|
551
|
-
? "lite"
|
|
552
|
-
: (p.options.instanceType ?? "lite"),
|
|
553
|
-
maxInstances: p.options.maxInstances ?? 5,
|
|
554
|
-
envVars: p.options.envVars,
|
|
555
|
-
}));
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
/**
|
|
559
|
-
* Expand a short image ref (e.g. `alepha-rocket:0.1.0`) into the
|
|
560
|
-
* fully-qualified `registry.cloudflare.com/<account>/<image>:<tag>`
|
|
561
|
-
* URL that wrangler validates at deploy time.
|
|
562
|
-
*
|
|
563
|
-
* Cloudflare Containers only pulls from `registry.cloudflare.com`;
|
|
564
|
-
* wrangler accepts either a Dockerfile path or a fully-qualified
|
|
565
|
-
* registry URL in the `image` field — not a bare DockerHub-style
|
|
566
|
-
* name. We let `$container({ image })` callers write the short
|
|
567
|
-
* form (it matches what `wrangler containers push <local>` accepts
|
|
568
|
-
* + matches the local docker tag) and rewrite to the CF registry
|
|
569
|
-
* URL here.
|
|
570
|
-
*
|
|
571
|
-
* Pass-through cases:
|
|
572
|
-
* - already a full URL: starts with `registry.cloudflare.com/`
|
|
573
|
-
* or contains a scheme/`://`
|
|
574
|
-
* - looks like a Dockerfile path: starts with `./` or `/`
|
|
575
|
-
*/
|
|
576
|
-
protected resolveContainerImage(image: string): string {
|
|
577
|
-
if (
|
|
578
|
-
image.startsWith("./") ||
|
|
579
|
-
image.startsWith("/") ||
|
|
580
|
-
image.startsWith("registry.cloudflare.com/") ||
|
|
581
|
-
image.includes("://")
|
|
582
|
-
) {
|
|
583
|
-
return image;
|
|
584
|
-
}
|
|
585
|
-
const accountId = process.env.CLOUDFLARE_ACCOUNT_ID;
|
|
586
|
-
if (!accountId) {
|
|
587
|
-
// No account id — leave the short form and let wrangler error
|
|
588
|
-
// out with a clearer message. This branch fires only in dry
|
|
589
|
-
// builds where the env isn't wired (e.g. `alepha build` without
|
|
590
|
-
// `alepha platform up` around it).
|
|
591
|
-
return image;
|
|
592
|
-
}
|
|
593
|
-
return `registry.cloudflare.com/${accountId}/${image}`;
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
protected enhanceContainers(
|
|
597
|
-
ctx: BuildTaskContext,
|
|
598
|
-
wrangler: WranglerConfig,
|
|
599
|
-
): ContainerDescriptor[] {
|
|
600
|
-
const descriptors: ContainerDescriptor[] = ctx.manifest
|
|
601
|
-
? (ctx.manifest.containers as ContainerDescriptor[])
|
|
602
|
-
: this.discoverContainers(ctx);
|
|
603
|
-
if (descriptors.length === 0) {
|
|
604
|
-
return [];
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
wrangler.containers = wrangler.containers || [];
|
|
608
|
-
wrangler.durable_objects = wrangler.durable_objects || {};
|
|
609
|
-
wrangler.durable_objects.bindings = wrangler.durable_objects.bindings || [];
|
|
610
|
-
wrangler.migrations = wrangler.migrations || [];
|
|
611
|
-
|
|
612
|
-
const newSqliteClasses: string[] = [];
|
|
613
|
-
for (const d of descriptors) {
|
|
614
|
-
wrangler.containers.push({
|
|
615
|
-
class_name: d.className,
|
|
616
|
-
image: this.resolveContainerImage(d.image),
|
|
617
|
-
instance_type: d.instanceType,
|
|
618
|
-
max_instances: d.maxInstances,
|
|
619
|
-
});
|
|
620
|
-
wrangler.durable_objects.bindings.push({
|
|
621
|
-
name: d.name,
|
|
622
|
-
class_name: d.className,
|
|
623
|
-
});
|
|
624
|
-
newSqliteClasses.push(d.className);
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
if (newSqliteClasses.length > 0) {
|
|
628
|
-
wrangler.migrations.push({
|
|
629
|
-
tag: "containers-v1",
|
|
630
|
-
new_sqlite_classes: newSqliteClasses,
|
|
631
|
-
});
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
return descriptors;
|
|
560
|
+
wrangler.send_email.push({ name: binding });
|
|
635
561
|
}
|
|
636
562
|
|
|
637
563
|
protected async writeWorkerEntryPoint(
|
|
638
564
|
root: string,
|
|
639
565
|
distDir: string,
|
|
640
|
-
containers: ContainerDescriptor[] = [],
|
|
641
566
|
): Promise<void> {
|
|
642
|
-
// Extend `globalThis.__alepha_CloudflareContainer` instead of
|
|
643
|
-
// importing `@cloudflare/containers` directly. The entry is
|
|
644
|
-
// written AFTER Vite, so any bare specifier in here survives to
|
|
645
|
-
// workerd (which has `no_bundle: true`) and 10021's out. The
|
|
646
|
-
// global is set by a side-effect in `alepha/container`'s
|
|
647
|
-
// workerd entry, which Vite has already inlined into
|
|
648
|
-
// `./index.js`. ESM evaluates top-level imports before the
|
|
649
|
-
// module body, so by the time the `extends` expression below is
|
|
650
|
-
// evaluated, the global is set.
|
|
651
|
-
const containerDeclarations = containers
|
|
652
|
-
.map((c) => {
|
|
653
|
-
const envVars = c.envVars
|
|
654
|
-
? ` envVars = ${JSON.stringify(c.envVars)};\n`
|
|
655
|
-
: "";
|
|
656
|
-
return `export class ${c.className} extends globalThis.__alepha_CloudflareContainer {\n defaultPort = ${c.port};\n sleepAfter = "${c.sleepAfter}";\n${envVars}}`;
|
|
657
|
-
})
|
|
658
|
-
.join("\n\n");
|
|
659
|
-
|
|
660
567
|
const workerCode = `
|
|
661
568
|
import "./index.js";
|
|
662
569
|
|
|
663
|
-
//
|
|
664
|
-
// so background work (notably $job direct dispatch)
|
|
665
|
-
// alive past the response.
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
570
|
+
// Run an invocation inside an Alepha fork carrying THIS invocation's
|
|
571
|
+
// \`executionCtx.waitUntil\`, so background work (notably $job direct dispatch)
|
|
572
|
+
// can keep the isolate alive past the response.
|
|
573
|
+
//
|
|
574
|
+
// It must be the async context, never the shared store: one isolate serves
|
|
575
|
+
// concurrent invocations, so a store slot would let request B overwrite
|
|
576
|
+
// request A's handle — A's background work would then call B's already-returned
|
|
577
|
+
// context ("waitUntil after response") and be silently dropped.
|
|
578
|
+
const withExecutionContext = (executionCtx, fn) => {
|
|
579
|
+
const waitUntil =
|
|
580
|
+
executionCtx && typeof executionCtx.waitUntil === "function"
|
|
581
|
+
? (p) => executionCtx.waitUntil(p)
|
|
582
|
+
: undefined;
|
|
583
|
+
|
|
584
|
+
return __alepha.context.run(fn, { "cloudflare.waitUntil": waitUntil });
|
|
672
585
|
};
|
|
673
586
|
|
|
674
587
|
// Bind the per-invocation Worker \`env\`: keep the full binding (D1, R2, KV, …)
|
|
@@ -684,7 +597,6 @@ export default {
|
|
|
684
597
|
const ctx = { req: request, res: undefined };
|
|
685
598
|
|
|
686
599
|
bindEnv(env);
|
|
687
|
-
setWaitUntil(executionCtx);
|
|
688
600
|
|
|
689
601
|
try {
|
|
690
602
|
await __alepha.start();
|
|
@@ -693,14 +605,15 @@ export default {
|
|
|
693
605
|
return new Response("Internal Server Error", { status: 500 });
|
|
694
606
|
}
|
|
695
607
|
|
|
696
|
-
await
|
|
608
|
+
await withExecutionContext(executionCtx, () =>
|
|
609
|
+
__alepha.events.emit("web:request", ctx),
|
|
610
|
+
);
|
|
697
611
|
|
|
698
612
|
return ctx.res;
|
|
699
613
|
},
|
|
700
614
|
|
|
701
615
|
scheduled: async (event, env, executionCtx) => {
|
|
702
616
|
bindEnv(env);
|
|
703
|
-
setWaitUntil(executionCtx);
|
|
704
617
|
|
|
705
618
|
try {
|
|
706
619
|
await __alepha.start();
|
|
@@ -709,15 +622,16 @@ export default {
|
|
|
709
622
|
throw err;
|
|
710
623
|
}
|
|
711
624
|
|
|
712
|
-
await
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
625
|
+
await withExecutionContext(executionCtx, () =>
|
|
626
|
+
__alepha.events.emit("cloudflare:scheduled", {
|
|
627
|
+
cron: event.cron,
|
|
628
|
+
scheduledTime: event.scheduledTime,
|
|
629
|
+
}),
|
|
630
|
+
);
|
|
716
631
|
},
|
|
717
632
|
|
|
718
633
|
queue: async (batch, env, executionCtx) => {
|
|
719
634
|
bindEnv(env);
|
|
720
|
-
setWaitUntil(executionCtx);
|
|
721
635
|
|
|
722
636
|
try {
|
|
723
637
|
await __alepha.start();
|
|
@@ -726,44 +640,23 @@ export default {
|
|
|
726
640
|
throw err;
|
|
727
641
|
}
|
|
728
642
|
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
643
|
+
await withExecutionContext(executionCtx, async () => {
|
|
644
|
+
for (const msg of batch.messages) {
|
|
645
|
+
try {
|
|
646
|
+
await __alepha.events.emit("cloudflare:queue", msg.body);
|
|
647
|
+
msg.ack();
|
|
648
|
+
} catch (e) {
|
|
649
|
+
msg.retry();
|
|
650
|
+
}
|
|
735
651
|
}
|
|
736
|
-
}
|
|
652
|
+
});
|
|
737
653
|
},
|
|
738
654
|
};
|
|
739
655
|
`.trim();
|
|
740
656
|
|
|
741
|
-
const containerBlock =
|
|
742
|
-
containers.length > 0 ? `${containerDeclarations}\n\n` : "";
|
|
743
|
-
|
|
744
657
|
await this.fs.writeFile(
|
|
745
658
|
this.fs.join(root, distDir, "main.cloudflare.js"),
|
|
746
|
-
`${this.warningComment}\n${
|
|
659
|
+
`${this.warningComment}\n${workerCode}`.trim(),
|
|
747
660
|
);
|
|
748
661
|
}
|
|
749
662
|
}
|
|
750
|
-
|
|
751
|
-
interface ContainerDescriptor {
|
|
752
|
-
name: string;
|
|
753
|
-
className: string;
|
|
754
|
-
image: string;
|
|
755
|
-
port: number;
|
|
756
|
-
sleepAfter: string;
|
|
757
|
-
/**
|
|
758
|
-
* Cloudflare Containers instance class.
|
|
759
|
-
*
|
|
760
|
-
* `dev` is the wrangler-pre-GA name; the platform accepts it but
|
|
761
|
-
* emits a deprecation warning telling you to use `lite`. We
|
|
762
|
-
* silently translate at write time (see `discoverContainers`
|
|
763
|
-
* default + `enhanceContainers` write) so older
|
|
764
|
-
* `$container({ instanceType: "dev" })` declarations keep working.
|
|
765
|
-
*/
|
|
766
|
-
instanceType: "dev" | "lite" | "basic" | "standard";
|
|
767
|
-
maxInstances: number;
|
|
768
|
-
envVars?: Record<string, string>;
|
|
769
|
-
}
|