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,50 +0,0 @@
|
|
|
1
|
-
import { $module } from "alepha";
|
|
2
|
-
import { $container } from "./primitives/$container.ts";
|
|
3
|
-
import { ContainerProvider } from "./providers/ContainerProvider.ts";
|
|
4
|
-
import { MockContainerProvider } from "./providers/MockContainerProvider.ts";
|
|
5
|
-
import { NodeContainerProvider } from "./providers/NodeContainerProvider.ts";
|
|
6
|
-
|
|
7
|
-
// ---------------------------------------------------------------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
export * from "./interfaces/ContainerOptions.ts";
|
|
10
|
-
export * from "./primitives/$container.ts";
|
|
11
|
-
export * from "./providers/ContainerProvider.ts";
|
|
12
|
-
export * from "./providers/MockContainerProvider.ts";
|
|
13
|
-
export * from "./providers/NodeContainerProvider.ts";
|
|
14
|
-
|
|
15
|
-
// ---------------------------------------------------------------------------------------------------------------------
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Type-safe RPC clients for ephemeral containerized Alepha apps.
|
|
19
|
-
*
|
|
20
|
-
* **Features:**
|
|
21
|
-
* - `$container<T>()` directive returns a typed Proxy onto a remote
|
|
22
|
-
* Alepha controller's `$action` endpoints — the wire format is the
|
|
23
|
-
* same `POST /api/<method>` shape served by every Alepha server.
|
|
24
|
-
* - Pluggable transport: Node (plain `fetch` against a configured URL),
|
|
25
|
-
* Mock (in-process call via `LinkProvider.follow` for tests),
|
|
26
|
-
* Cloudflare workerd (`getContainer().fetch()` through the Containers
|
|
27
|
-
* binding — see `alepha/container` workerd entry).
|
|
28
|
-
* - Build-time integration: `BuildCloudflareTask.enhanceContainers`
|
|
29
|
-
* emits the matching wrangler bindings and Durable Object class
|
|
30
|
-
* declarations.
|
|
31
|
-
*
|
|
32
|
-
* The Node binding is the "temporary, not perfect" path documented in
|
|
33
|
-
* the spec — apps need to provide an explicit `url` per primitive
|
|
34
|
-
* until a `target=docker` adapter ships.
|
|
35
|
-
*
|
|
36
|
-
* @module alepha.container
|
|
37
|
-
*/
|
|
38
|
-
export const AlephaContainer = $module({
|
|
39
|
-
name: "alepha.container",
|
|
40
|
-
primitives: [$container],
|
|
41
|
-
services: [ContainerProvider],
|
|
42
|
-
variants: [MockContainerProvider, NodeContainerProvider],
|
|
43
|
-
register: (alepha) => {
|
|
44
|
-
alepha.with({
|
|
45
|
-
optional: true,
|
|
46
|
-
provide: ContainerProvider,
|
|
47
|
-
use: alepha.isTest() ? MockContainerProvider : NodeContainerProvider,
|
|
48
|
-
});
|
|
49
|
-
},
|
|
50
|
-
});
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Container } from "@cloudflare/containers";
|
|
2
|
-
import { $module } from "alepha";
|
|
3
|
-
import { $container } from "./primitives/$container.ts";
|
|
4
|
-
import { CloudflareContainerProvider } from "./providers/CloudflareContainerProvider.ts";
|
|
5
|
-
import { ContainerProvider } from "./providers/ContainerProvider.ts";
|
|
6
|
-
|
|
7
|
-
// Stash the Cloudflare Containers `Container` base class on globalThis
|
|
8
|
-
// so `BuildCloudflareTask`'s post-Vite-emitted entry
|
|
9
|
-
// (`dist/main.cloudflare.js`) can declare
|
|
10
|
-
// `class <T> extends globalThis.__alepha_CloudflareContainer` without
|
|
11
|
-
// introducing a bare `@cloudflare/containers` specifier.
|
|
12
|
-
//
|
|
13
|
-
// The entry is written AFTER Vite — anything Vite hasn't seen
|
|
14
|
-
// survives as an unresolved import all the way to workerd (where the
|
|
15
|
-
// upload is `no_bundle: true`). This side-effect runs whenever an app
|
|
16
|
-
// imports anything from `alepha/container` (Vite picks this file via
|
|
17
|
-
// the `workerd` export condition), so by the time the entry's
|
|
18
|
-
// `import "./index.js"` finishes, the global is set and the
|
|
19
|
-
// `extends` expression resolves.
|
|
20
|
-
(globalThis as any).__alepha_CloudflareContainer = Container;
|
|
21
|
-
|
|
22
|
-
// ---------------------------------------------------------------------------------------------------------------------
|
|
23
|
-
|
|
24
|
-
export * from "./interfaces/ContainerOptions.ts";
|
|
25
|
-
export * from "./primitives/$container.ts";
|
|
26
|
-
export * from "./providers/CloudflareContainerProvider.ts";
|
|
27
|
-
export * from "./providers/ContainerProvider.ts";
|
|
28
|
-
|
|
29
|
-
// ---------------------------------------------------------------------------------------------------------------------
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Type-safe RPC clients for ephemeral containerized Alepha apps,
|
|
33
|
-
* Cloudflare workerd build.
|
|
34
|
-
*
|
|
35
|
-
* Auto-binds `CloudflareContainerProvider` so `$container()` calls
|
|
36
|
-
* route through `env.<NAME>.getContainer(...).fetch()`. Pair with
|
|
37
|
-
* `BuildCloudflareTask.enhanceContainers` (in `alepha/cli/core`) which
|
|
38
|
-
* emits the wrangler.jsonc bindings and DO class declarations.
|
|
39
|
-
*
|
|
40
|
-
* @module alepha.container
|
|
41
|
-
*/
|
|
42
|
-
export const AlephaContainer = $module({
|
|
43
|
-
name: "alepha.container",
|
|
44
|
-
primitives: [$container],
|
|
45
|
-
services: [ContainerProvider, CloudflareContainerProvider],
|
|
46
|
-
register: (alepha) => {
|
|
47
|
-
alepha.with({
|
|
48
|
-
optional: true,
|
|
49
|
-
provide: ContainerProvider,
|
|
50
|
-
use: CloudflareContainerProvider,
|
|
51
|
-
});
|
|
52
|
-
},
|
|
53
|
-
});
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import type { DurationLike } from "alepha/datetime";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Options for the `$container` primitive.
|
|
5
|
-
*
|
|
6
|
-
* Describes a remote Alepha app running in an ephemeral container. The
|
|
7
|
-
* primitive returns a typed Proxy that calls the container's `$action`
|
|
8
|
-
* endpoints through whatever transport the active provider chooses
|
|
9
|
-
* (Cloudflare Containers binding on `target=cloudflare`, plain HTTP on
|
|
10
|
-
* Node when `url` is set).
|
|
11
|
-
*/
|
|
12
|
-
export interface ContainerPrimitiveOptions {
|
|
13
|
-
/**
|
|
14
|
-
* Logical container name. Defaults to the property key.
|
|
15
|
-
*
|
|
16
|
-
* Cloudflare provider uppercases this to look up the binding
|
|
17
|
-
* (`env.<NAME>`), so prefer lowercase here.
|
|
18
|
-
*/
|
|
19
|
-
name?: string;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Docker image the container runs. Required.
|
|
23
|
-
*
|
|
24
|
-
* The build task uses this verbatim in `wrangler.jsonc`'s
|
|
25
|
-
* `containers[].image` entry.
|
|
26
|
-
*/
|
|
27
|
-
image: string;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Explicit URL the Node provider should call. When set, `$container`
|
|
31
|
-
* routes through `LinkProvider` exactly like `$remote({ url })`.
|
|
32
|
-
*
|
|
33
|
-
* On `target=cloudflare`, this is ignored — the Containers binding is
|
|
34
|
-
* used instead.
|
|
35
|
-
*/
|
|
36
|
-
url?: string | (() => string);
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Port the container app listens on. Defaults to 3000 (Alepha
|
|
40
|
-
* convention — NOT Cloudflare's 8080). Used in build-time codegen.
|
|
41
|
-
*/
|
|
42
|
-
port?: number;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Idle window before the platform stops the container instance.
|
|
46
|
-
*
|
|
47
|
-
* @default "15m"
|
|
48
|
-
*/
|
|
49
|
-
sleepAfter?: DurationLike;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Environment variables injected into the container at runtime.
|
|
53
|
-
*/
|
|
54
|
-
envVars?: Record<string, string>;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Cloudflare-specific instance class. Ignored on other targets.
|
|
58
|
-
*
|
|
59
|
-
* @default "dev"
|
|
60
|
-
*/
|
|
61
|
-
instanceType?: "dev" | "basic" | "standard";
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Maximum concurrent container instances.
|
|
65
|
-
*
|
|
66
|
-
* @default 5
|
|
67
|
-
*/
|
|
68
|
-
maxInstances?: number;
|
|
69
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { $inject, AlephaError, createPrimitive, KIND, Primitive } from "alepha";
|
|
2
|
-
import type { ContainerPrimitiveOptions } from "../interfaces/ContainerOptions.ts";
|
|
3
|
-
import { ContainerProvider } from "../providers/ContainerProvider.ts";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* `$container` — typed RPC client to a containerized Alepha app.
|
|
7
|
-
*
|
|
8
|
-
* Returns a typed Proxy whose method calls map 1:1 to the target
|
|
9
|
-
* controller's `$action` endpoints. The wire format mirrors what a
|
|
10
|
-
* normal Alepha server exposes (`POST /api/<method>` with a JSON body),
|
|
11
|
-
* so the container is literally a tiny Alepha worker.
|
|
12
|
-
*
|
|
13
|
-
* Transport is owned by the active {@link ContainerProvider}:
|
|
14
|
-
* - `target=cloudflare` → `CloudflareContainerProvider` routes through
|
|
15
|
-
* the Containers binding (`env.<NAME>.getContainer(...).fetch()`).
|
|
16
|
-
* - Node (with `url` set) → `NodeContainerProvider` uses plain
|
|
17
|
-
* `fetch()` against the configured URL.
|
|
18
|
-
*
|
|
19
|
-
* Build-time, `BuildCloudflareTask.enhanceContainers` walks
|
|
20
|
-
* `alepha.primitives($container)` to emit the matching `wrangler.jsonc`
|
|
21
|
-
* entries and Durable Object class declarations into
|
|
22
|
-
* `main.cloudflare.js`.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```ts
|
|
26
|
-
* import { $container } from "alepha/container";
|
|
27
|
-
* import type { RocketController } from "@alepha/rocket";
|
|
28
|
-
*
|
|
29
|
-
* class DeployService {
|
|
30
|
-
* rocket = $container<RocketController>({
|
|
31
|
-
* image: "alepha/rocket:latest",
|
|
32
|
-
* port: 3000,
|
|
33
|
-
* sleepAfter: "15m",
|
|
34
|
-
* });
|
|
35
|
-
*
|
|
36
|
-
* async deploy() {
|
|
37
|
-
* return this.rocket.createJob({ body: { op: "up" } });
|
|
38
|
-
* }
|
|
39
|
-
* }
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
export const $container = <T extends object = any>(
|
|
43
|
-
options: ContainerPrimitiveOptions,
|
|
44
|
-
): ContainerProxy<T> => {
|
|
45
|
-
if (!options.image) {
|
|
46
|
-
throw new AlephaError("$container requires an 'image' option");
|
|
47
|
-
}
|
|
48
|
-
const instance = createPrimitive(ContainerPrimitive, options);
|
|
49
|
-
return instance.proxy() as ContainerProxy<T>;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Typed proxy returned by `$container<T>()`. Each `$action` member of
|
|
54
|
-
* `T` becomes a callable returning the action's response body.
|
|
55
|
-
*
|
|
56
|
-
* The runtime shape is a `Proxy(primitive)` — own-property reads hit the
|
|
57
|
-
* underlying `ContainerPrimitive` (so `alepha.primitives($container)`
|
|
58
|
-
* still finds it via the `instanceof Primitive` check inside
|
|
59
|
-
* `Alepha.new()`), and anything else is treated as an action name and
|
|
60
|
-
* routed through the active `ContainerProvider`.
|
|
61
|
-
*/
|
|
62
|
-
export type ContainerProxy<T extends object> = {
|
|
63
|
-
[K in keyof T]: T[K] extends (...args: infer A) => infer R
|
|
64
|
-
? (...args: A) => Promise<Awaited<R>>
|
|
65
|
-
: (config?: {
|
|
66
|
-
body?: unknown;
|
|
67
|
-
query?: unknown;
|
|
68
|
-
params?: unknown;
|
|
69
|
-
}) => Promise<any>;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export class ContainerPrimitive extends Primitive<ContainerPrimitiveOptions> {
|
|
73
|
-
protected readonly provider = $inject(ContainerProvider);
|
|
74
|
-
|
|
75
|
-
public get name(): string {
|
|
76
|
-
return this.options.name ?? this.config.propertyKey;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Build the typed Proxy. The target is the primitive itself so
|
|
81
|
-
* `instanceof Primitive` keeps working (required by Alepha's
|
|
82
|
-
* primitive registration in `Alepha.new`). Property reads that match
|
|
83
|
-
* an own/inherited member return that member; anything else is
|
|
84
|
-
* treated as an action name and routed through the provider.
|
|
85
|
-
*/
|
|
86
|
-
public proxy<T extends object = any>(): ContainerProxy<T> {
|
|
87
|
-
const primitive = this;
|
|
88
|
-
return new Proxy(primitive as any, {
|
|
89
|
-
get(target: any, prop: string | symbol, receiver: any) {
|
|
90
|
-
if (typeof prop === "symbol" || prop in target) {
|
|
91
|
-
return Reflect.get(target, prop, receiver);
|
|
92
|
-
}
|
|
93
|
-
return (config: any = {}) =>
|
|
94
|
-
primitive.provider.invoke(primitive, prop as string, config);
|
|
95
|
-
},
|
|
96
|
-
}) as ContainerProxy<T>;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
$container[KIND] = ContainerPrimitive;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { getContainer } from "@cloudflare/containers";
|
|
2
|
-
import { $inject, Alepha, AlephaError } from "alepha";
|
|
3
|
-
import type { ContainerPrimitive } from "../primitives/$container.ts";
|
|
4
|
-
import {
|
|
5
|
-
type ContainerInvokeConfig,
|
|
6
|
-
ContainerProvider,
|
|
7
|
-
} from "./ContainerProvider.ts";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Cloudflare Workers (workerd) container provider.
|
|
11
|
-
*
|
|
12
|
-
* Routes proxy calls through the Cloudflare Containers binding bound
|
|
13
|
-
* on `env.<NAME>`, using a single shared instance per container.
|
|
14
|
-
* `getContainer` from `@cloudflare/containers` is a free function (not
|
|
15
|
-
* a method on the binding) — it takes the DO namespace and an id and
|
|
16
|
-
* returns a stub with a `.fetch()` method targeting the running
|
|
17
|
-
* container instance.
|
|
18
|
-
*
|
|
19
|
-
* The binding is generated by `BuildCloudflareTask.enhanceContainers`
|
|
20
|
-
* from the `$container` primitives discovered in the app. The runtime
|
|
21
|
-
* `env` object is pulled from the Alepha store key `cloudflare.env`
|
|
22
|
-
* — the worker entry point publishes it there on every fetch
|
|
23
|
-
* (`__alepha.set("cloudflare.env", env)`).
|
|
24
|
-
*/
|
|
25
|
-
export class CloudflareContainerProvider extends ContainerProvider {
|
|
26
|
-
protected readonly alepha = $inject(Alepha);
|
|
27
|
-
|
|
28
|
-
public override async invoke(
|
|
29
|
-
container: ContainerPrimitive,
|
|
30
|
-
action: string,
|
|
31
|
-
config: ContainerInvokeConfig,
|
|
32
|
-
): Promise<unknown> {
|
|
33
|
-
const env = this.alepha.store.get("cloudflare.env") as
|
|
34
|
-
| Record<string, unknown>
|
|
35
|
-
| undefined;
|
|
36
|
-
if (!env) {
|
|
37
|
-
throw new AlephaError(
|
|
38
|
-
`CloudflareContainerProvider could not resolve 'cloudflare.env' from the store — is the app running on workerd?`,
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const bindingName = container.name.toUpperCase();
|
|
43
|
-
const binding = env[bindingName];
|
|
44
|
-
if (!binding) {
|
|
45
|
-
throw new AlephaError(
|
|
46
|
-
`Cloudflare Containers binding '${bindingName}' not found on env — check wrangler.jsonc.`,
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const instance = getContainer(binding as never, "shared");
|
|
51
|
-
const { path, init } = this.buildRequest(action, config);
|
|
52
|
-
const request = new Request(`http://container${path}`, init);
|
|
53
|
-
const response = await instance.fetch(request);
|
|
54
|
-
|
|
55
|
-
if (!response.ok) {
|
|
56
|
-
const text = await response.text().catch(() => "");
|
|
57
|
-
throw new AlephaError(
|
|
58
|
-
`Container '${container.name}' action '${action}' failed: ${response.status} ${response.statusText}${
|
|
59
|
-
text ? ` — ${text}` : ""
|
|
60
|
-
}`,
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const contentType = response.headers.get("content-type") ?? "";
|
|
65
|
-
if (contentType.includes("application/json")) {
|
|
66
|
-
return await response.json();
|
|
67
|
-
}
|
|
68
|
-
return await response.text();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { AlephaError } from "alepha";
|
|
2
|
-
import { $logger } from "alepha/logger";
|
|
3
|
-
import type { ContainerPrimitive } from "../primitives/$container.ts";
|
|
4
|
-
|
|
5
|
-
export interface ContainerInvokeConfig {
|
|
6
|
-
body?: unknown;
|
|
7
|
-
query?: Record<string, unknown>;
|
|
8
|
-
params?: Record<string, unknown>;
|
|
9
|
-
headers?: Record<string, string>;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Abstract transport for `$container` proxies.
|
|
14
|
-
*
|
|
15
|
-
* Concrete subclasses translate a `(container, action, config)` call
|
|
16
|
-
* into an HTTP request that reaches the running container. The default
|
|
17
|
-
* binding on Node throws — apps must register either a
|
|
18
|
-
* `NodeContainerProvider` (with `url` on each primitive) or the
|
|
19
|
-
* Cloudflare workerd variant.
|
|
20
|
-
*/
|
|
21
|
-
export abstract class ContainerProvider {
|
|
22
|
-
protected readonly log = $logger();
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Invoke a remote action on the container. Subclasses do the work;
|
|
26
|
-
* the default implementation rejects to make missing wiring obvious.
|
|
27
|
-
*/
|
|
28
|
-
public async invoke(
|
|
29
|
-
container: ContainerPrimitive,
|
|
30
|
-
action: string,
|
|
31
|
-
config: ContainerInvokeConfig,
|
|
32
|
-
): Promise<unknown> {
|
|
33
|
-
void config;
|
|
34
|
-
throw new AlephaError(
|
|
35
|
-
`No ContainerProvider configured for container '${container.name}' (action '${action}'). ` +
|
|
36
|
-
`Set up alepha/container via AlephaContainer and either supply 'url' (Node) or build for target=cloudflare.`,
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Helper: build the fetch path/body for an action call. Kept as a
|
|
42
|
-
* protected method so workerd and Node providers share the wire
|
|
43
|
-
* shape — `POST /api/<action>` with the JSON body, query params on
|
|
44
|
-
* the URL, and the request headers merged in.
|
|
45
|
-
*/
|
|
46
|
-
protected buildRequest(
|
|
47
|
-
action: string,
|
|
48
|
-
config: ContainerInvokeConfig,
|
|
49
|
-
): { path: string; init: RequestInit } {
|
|
50
|
-
const params = new URLSearchParams();
|
|
51
|
-
if (config.query) {
|
|
52
|
-
for (const [k, v] of Object.entries(config.query)) {
|
|
53
|
-
if (v !== undefined && v !== null) params.set(k, String(v));
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Match the route Alepha generates server-side when no explicit
|
|
58
|
-
// `path:` is set on `$action`: `/${name}` with one `/:<key>`
|
|
59
|
-
// segment appended per param. Params that match a `:key`
|
|
60
|
-
// placeholder are substituted in place; any remaining params are
|
|
61
|
-
// appended in declaration order so `params: {id:"abc"}` against a
|
|
62
|
-
// proxy action `getDeploy` yields `/api/getDeploy/abc`.
|
|
63
|
-
let path = `/api/${action}`;
|
|
64
|
-
if (config.params) {
|
|
65
|
-
const tail: string[] = [];
|
|
66
|
-
for (const [k, v] of Object.entries(config.params)) {
|
|
67
|
-
const placeholder = `:${k}`;
|
|
68
|
-
const encoded = encodeURIComponent(String(v));
|
|
69
|
-
if (path.includes(placeholder)) {
|
|
70
|
-
path = path.replace(placeholder, encoded);
|
|
71
|
-
} else {
|
|
72
|
-
tail.push(encoded);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
if (tail.length) path += `/${tail.join("/")}`;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const search = params.toString();
|
|
79
|
-
if (search) path += `?${search}`;
|
|
80
|
-
|
|
81
|
-
const init: RequestInit = {
|
|
82
|
-
method: "POST",
|
|
83
|
-
headers: {
|
|
84
|
-
"content-type": "application/json",
|
|
85
|
-
...(config.headers ?? {}),
|
|
86
|
-
},
|
|
87
|
-
body: config.body !== undefined ? JSON.stringify(config.body) : undefined,
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
return { path, init };
|
|
91
|
-
}
|
|
92
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { $inject, Alepha, AlephaError } from "alepha";
|
|
2
|
-
import type { ContainerPrimitive } from "../primitives/$container.ts";
|
|
3
|
-
import {
|
|
4
|
-
type ContainerInvokeConfig,
|
|
5
|
-
ContainerProvider,
|
|
6
|
-
} from "./ContainerProvider.ts";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* In-process test provider.
|
|
10
|
-
*
|
|
11
|
-
* Resolves the action name against `LinkProvider`'s registered links in
|
|
12
|
-
* the SAME Alepha instance — effectively calling the "containerized"
|
|
13
|
-
* controller as if it were local. Use it in tests: register the
|
|
14
|
-
* controller class on the test container alongside the consumer and
|
|
15
|
-
* substitute `ContainerProvider` with `MockContainerProvider`.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```ts
|
|
19
|
-
* const alepha = Alepha.create()
|
|
20
|
-
* .with(AlephaContainer)
|
|
21
|
-
* .with(RocketController)
|
|
22
|
-
* .with(MyApp)
|
|
23
|
-
* .with({ provide: ContainerProvider, use: MockContainerProvider });
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export class MockContainerProvider extends ContainerProvider {
|
|
27
|
-
protected readonly alepha = $inject(Alepha);
|
|
28
|
-
|
|
29
|
-
public override async invoke(
|
|
30
|
-
container: ContainerPrimitive,
|
|
31
|
-
action: string,
|
|
32
|
-
config: ContainerInvokeConfig,
|
|
33
|
-
): Promise<unknown> {
|
|
34
|
-
void container;
|
|
35
|
-
// Lazy-resolve LinkProvider so tests that don't load `alepha/server/links`
|
|
36
|
-
// still get a clear error message.
|
|
37
|
-
const linkProviderClass = await this.loadLinkProvider();
|
|
38
|
-
const linkProvider = this.alepha.inject(linkProviderClass) as {
|
|
39
|
-
follow: (
|
|
40
|
-
name: string,
|
|
41
|
-
config?: Record<string, unknown>,
|
|
42
|
-
) => Promise<unknown>;
|
|
43
|
-
};
|
|
44
|
-
return await linkProvider.follow(action, {
|
|
45
|
-
body: config.body,
|
|
46
|
-
query: config.query,
|
|
47
|
-
params: config.params,
|
|
48
|
-
headers: config.headers,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
protected async loadLinkProvider(): Promise<any> {
|
|
53
|
-
try {
|
|
54
|
-
const mod = await import("alepha/server/links");
|
|
55
|
-
return mod.LinkProvider;
|
|
56
|
-
} catch {
|
|
57
|
-
throw new AlephaError(
|
|
58
|
-
"MockContainerProvider needs 'alepha/server/links' to be available — add AlephaServerLinks to the test app.",
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { AlephaError } from "alepha";
|
|
2
|
-
import type { ContainerPrimitive } from "../primitives/$container.ts";
|
|
3
|
-
import {
|
|
4
|
-
type ContainerInvokeConfig,
|
|
5
|
-
ContainerProvider,
|
|
6
|
-
} from "./ContainerProvider.ts";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Node (dev / test / non-Cloudflare) container provider.
|
|
10
|
-
*
|
|
11
|
-
* Routes proxy calls through plain `fetch()` against the URL given on
|
|
12
|
-
* the `$container` primitive. If no `url` is supplied, calls throw —
|
|
13
|
-
* v1 deliberately has no Docker spawning. This is the "temporary, not
|
|
14
|
-
* perfect" Node path documented in the spec; the longer-term plan is
|
|
15
|
-
* to plug in a `target=docker` adapter once that lands.
|
|
16
|
-
*/
|
|
17
|
-
export class NodeContainerProvider extends ContainerProvider {
|
|
18
|
-
public override async invoke(
|
|
19
|
-
container: ContainerPrimitive,
|
|
20
|
-
action: string,
|
|
21
|
-
config: ContainerInvokeConfig,
|
|
22
|
-
): Promise<unknown> {
|
|
23
|
-
const url = this.resolveUrl(container);
|
|
24
|
-
if (!url) {
|
|
25
|
-
throw new AlephaError(
|
|
26
|
-
`Container '${container.name}' has no 'url' configured — NodeContainerProvider cannot reach the container.`,
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const { path, init } = this.buildRequest(action, config);
|
|
31
|
-
const response = await fetch(`${url.replace(/\/$/, "")}${path}`, init);
|
|
32
|
-
|
|
33
|
-
if (!response.ok) {
|
|
34
|
-
const text = await response.text().catch(() => "");
|
|
35
|
-
throw new AlephaError(
|
|
36
|
-
`Container '${container.name}' action '${action}' failed: ${response.status} ${response.statusText}${
|
|
37
|
-
text ? ` — ${text}` : ""
|
|
38
|
-
}`,
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const contentType = response.headers.get("content-type") ?? "";
|
|
43
|
-
if (contentType.includes("application/json")) {
|
|
44
|
-
return await response.json();
|
|
45
|
-
}
|
|
46
|
-
return await response.text();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
protected resolveUrl(container: ContainerPrimitive): string | undefined {
|
|
50
|
-
const url = container.options.url;
|
|
51
|
-
return typeof url === "function" ? url() : url;
|
|
52
|
-
}
|
|
53
|
-
}
|