alepha 0.21.2 → 0.23.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/README.md +0 -1
- package/dist/api/audits/index.browser.js.map +1 -1
- package/dist/api/audits/index.d.ts +393 -403
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +25 -56
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.browser.js +31 -1
- package/dist/api/files/index.browser.js.map +1 -1
- package/dist/api/files/index.d.ts +313 -208
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +152 -42
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.browser.js +2 -2
- package/dist/api/jobs/index.browser.js.map +1 -1
- package/dist/api/jobs/index.d.ts +282 -285
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +39 -33
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +217 -222
- package/dist/api/keys/index.d.ts.map +1 -1
- package/dist/api/keys/index.js.map +1 -1
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +188 -195
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/oauth/index.d.ts +71 -76
- package/dist/api/oauth/index.d.ts.map +1 -1
- package/dist/api/oauth/index.js.map +1 -1
- package/dist/api/organizations/index.browser.js.map +1 -1
- package/dist/api/organizations/index.d.ts +104 -109
- package/dist/api/organizations/index.d.ts.map +1 -1
- package/dist/api/organizations/index.js.map +1 -1
- package/dist/api/parameters/index.browser.js +43 -16
- package/dist/api/parameters/index.browser.js.map +1 -1
- package/dist/api/parameters/index.d.ts +488 -344
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +175 -35
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/payments/index.d.ts +396 -402
- package/dist/api/payments/index.d.ts.map +1 -1
- package/dist/api/payments/index.js.map +1 -1
- package/dist/api/subscriptions/index.d.ts +644 -652
- package/dist/api/subscriptions/index.d.ts.map +1 -1
- package/dist/api/subscriptions/index.js +1 -1
- package/dist/api/subscriptions/index.js.map +1 -1
- package/dist/api/users/index.browser.js +7 -0
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +1106 -1005
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +307 -64
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.browser.js.map +1 -1
- package/dist/api/verifications/index.d.ts +137 -143
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/background/index.d.ts +95 -0
- package/dist/background/index.d.ts.map +1 -0
- package/dist/background/index.js +121 -0
- package/dist/background/index.js.map +1 -0
- package/dist/background/index.workerd.js +110 -0
- package/dist/background/index.workerd.js.map +1 -0
- package/dist/batch/index.d.ts +5 -7
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js.map +1 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/bucket/index.d.ts +76 -54
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +58 -11
- package/dist/bucket/index.js.map +1 -1
- package/dist/bucket/index.workerd.js +200 -5
- package/dist/bucket/index.workerd.js.map +1 -1
- package/dist/cache/core/index.d.ts +7 -10
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cache/core/index.workerd.js.map +1 -1
- package/dist/cache/database/index.d.ts +22 -26
- package/dist/cache/database/index.d.ts.map +1 -1
- package/dist/cache/database/index.js.map +1 -1
- package/dist/cache/redis/index.d.ts +4 -7
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/captcha/index.d.ts +3 -6
- package/dist/captcha/index.d.ts.map +1 -1
- package/dist/captcha/index.js.map +1 -1
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js.map +1 -1
- package/dist/cli/core/index.d.ts +458 -249
- package/dist/cli/core/index.d.ts.map +1 -1
- package/dist/cli/core/index.js +372 -660
- package/dist/cli/core/index.js.map +1 -1
- package/dist/cli/devtools/index.d.ts +3 -5
- package/dist/cli/devtools/index.d.ts.map +1 -1
- package/dist/cli/devtools/index.js.map +1 -1
- package/dist/cli/i18n/index.d.ts +20 -17
- package/dist/cli/i18n/index.d.ts.map +1 -1
- package/dist/cli/i18n/index.js +45 -11
- package/dist/cli/i18n/index.js.map +1 -1
- package/dist/cli/platform/index.d.ts +126 -1342
- package/dist/cli/platform/index.d.ts.map +1 -1
- package/dist/cli/platform/index.js +136 -2374
- package/dist/cli/platform/index.js.map +1 -1
- package/dist/cli/platform-lib/index.d.ts +1472 -0
- package/dist/cli/platform-lib/index.d.ts.map +1 -0
- package/dist/cli/platform-lib/index.js +2660 -0
- package/dist/cli/platform-lib/index.js.map +1 -0
- package/dist/cli/vendor/index.d.ts +17 -21
- package/dist/cli/vendor/index.d.ts.map +1 -1
- package/dist/cli/vendor/index.js.map +1 -1
- package/dist/command/index.d.ts +20 -19
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +39 -10
- package/dist/command/index.js.map +1 -1
- package/dist/{containers → container}/core/index.d.ts +13 -15
- package/dist/container/core/index.d.ts.map +1 -0
- package/dist/{containers → container}/core/index.js +23 -14
- package/dist/container/core/index.js.map +1 -0
- package/dist/{containers → container}/core/index.workerd.js +37 -22
- package/dist/container/core/index.workerd.js.map +1 -0
- package/dist/core/index.browser.js +27 -1
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +48 -24
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +27 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +27 -1
- package/dist/core/index.native.js.map +1 -1
- package/dist/core/index.workerd.js +27 -1
- package/dist/core/index.workerd.js.map +1 -1
- package/dist/crypto/index.browser.js.map +1 -1
- package/dist/crypto/index.d.ts +5 -8
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/crypto/index.js.map +1 -1
- package/dist/datetime/index.d.ts +3 -4
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/brevo/index.d.ts +2 -4
- package/dist/email/brevo/index.d.ts.map +1 -1
- package/dist/email/brevo/index.js.map +1 -1
- package/dist/email/cloudflare/index.d.ts +20 -7
- package/dist/email/cloudflare/index.d.ts.map +1 -1
- package/dist/email/cloudflare/index.js +46 -9
- package/dist/email/cloudflare/index.js.map +1 -1
- package/dist/email/core/index.d.ts +6 -9
- package/dist/email/core/index.d.ts.map +1 -1
- package/dist/email/core/index.js.map +1 -1
- package/dist/email/core/index.workerd.js.map +1 -1
- package/dist/email/smtp/index.d.ts +10 -13
- package/dist/email/smtp/index.d.ts.map +1 -1
- package/dist/email/smtp/index.js +107 -32
- package/dist/email/smtp/index.js.map +1 -1
- package/dist/fake/index.d.ts +1 -2
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +9 -14
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/core/index.js.map +1 -1
- package/dist/lock/redis/index.d.ts +2 -4
- 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 +105 -76
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +196 -174
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +25 -20
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +23 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/core/index.browser.js.map +1 -1
- package/dist/orm/core/index.bun.js +19 -1
- package/dist/orm/core/index.bun.js.map +1 -1
- package/dist/orm/core/index.d.ts +76 -62
- package/dist/orm/core/index.d.ts.map +1 -1
- package/dist/orm/core/index.js +20 -2
- package/dist/orm/core/index.js.map +1 -1
- package/dist/orm/postgres/index.bun.js.map +1 -1
- package/dist/orm/postgres/index.d.ts +28 -20
- package/dist/orm/postgres/index.d.ts.map +1 -1
- package/dist/orm/postgres/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +12 -15
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/core/index.js.map +1 -1
- package/dist/queue/core/index.workerd.js.map +1 -1
- package/dist/queue/redis/index.d.ts +3 -5
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/queue/redis/index.js.map +1 -1
- package/dist/react/auth/index.browser.js +9 -2
- package/dist/react/auth/index.browser.js.map +1 -1
- package/dist/react/auth/index.d.ts +14 -9
- package/dist/react/auth/index.d.ts.map +1 -1
- package/dist/react/auth/index.js +9 -2
- package/dist/react/auth/index.js.map +1 -1
- package/dist/react/core/index.d.ts +7 -8
- package/dist/react/core/index.d.ts.map +1 -1
- package/dist/react/core/index.js +6 -3
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +2 -5
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/form/index.js +16 -15
- 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 +2 -4
- 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 +90 -11
- package/dist/react/i18n/index.d.ts.map +1 -1
- package/dist/react/i18n/index.js +147 -11
- package/dist/react/i18n/index.js.map +1 -1
- package/dist/react/intro/index.d.ts +1 -2
- package/dist/react/intro/index.d.ts.map +1 -1
- package/dist/react/intro/index.js +2 -2
- package/dist/react/intro/index.js.map +1 -1
- package/dist/react/router/index.browser.js +193 -24
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +434 -222
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +249 -35
- 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 +92 -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 +1 -2
- package/dist/react/testing/index.d.ts.map +1 -1
- package/dist/react/testing/index.js +16 -17
- package/dist/react/testing/index.js.map +1 -1
- package/dist/react/ui/index.d.ts +20 -25
- package/dist/react/ui/index.d.ts.map +1 -1
- package/dist/react/ui/index.js.map +1 -1
- package/dist/redis/index.bun.js.map +1 -1
- package/dist/redis/index.d.ts +17 -19
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.d.ts +2 -4
- 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 +10 -13
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/index.workerd.js.map +1 -1
- package/dist/security/index.browser.js.map +1 -1
- package/dist/security/index.d.ts +45 -48
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.browser.js.map +1 -1
- package/dist/server/auth/index.d.ts +272 -173
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1608 -15
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cookies/index.browser.js.map +1 -1
- package/dist/server/cookies/index.d.ts +20 -7
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +22 -3
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts +106 -73
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +44 -0
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +11 -14
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/cors/index.js.map +1 -1
- package/dist/server/etag/index.d.ts +6 -9
- 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 -21
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/health/index.js.map +1 -1
- package/dist/server/links/index.browser.js +2 -0
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +63 -67
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +2 -0
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +5 -7
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/proxy/index.d.ts +3 -5
- 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 +10 -13
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/static/index.d.ts +3 -5
- 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 +5 -8
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +3 -5
- 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 +2 -4
- package/dist/system/index.d.ts.map +1 -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 +4 -6
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/core/index.js.map +1 -1
- package/dist/topic/redis/index.d.ts +5 -8
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/topic/redis/index.js.map +1 -1
- package/package.json +59 -23
- package/src/api/audits/__tests__/AuditService.spec.ts +18 -110
- package/src/api/audits/controllers/AdminAuditController.ts +14 -0
- package/src/api/audits/services/AuditService.ts +21 -88
- package/src/api/files/__tests__/FileService.spec.ts +207 -2
- package/src/api/files/index.ts +3 -0
- package/src/api/files/schemas/fileCreatorSummarySchema.ts +22 -0
- package/src/api/files/schemas/fileResourceSchema.ts +10 -1
- package/src/api/files/services/FileService.ts +170 -72
- package/src/api/jobs/__tests__/$job.spec.ts +24 -1
- package/src/api/jobs/index.ts +4 -3
- package/src/api/jobs/primitives/$job.ts +7 -3
- package/src/api/jobs/providers/DirectJobDispatcher.ts +17 -36
- package/src/api/jobs/providers/JobProvider.ts +53 -24
- package/src/api/jobs/schemas/jobConfigAtom.ts +1 -1
- package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +4 -1
- package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +3 -1
- package/src/api/parameters/__tests__/$parameter.spec.ts +19 -2
- package/src/api/parameters/audits/ParameterAudits.ts +17 -0
- package/src/api/parameters/controllers/AdminParameterController.ts +95 -19
- package/src/api/parameters/index.ts +3 -0
- package/src/api/parameters/schemas/activateParameterBodySchema.ts +3 -3
- package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +3 -2
- package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +25 -0
- package/src/api/parameters/schemas/parameterResponseSchema.ts +5 -0
- package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +4 -2
- package/src/api/parameters/services/ParameterProvider.ts +69 -6
- package/src/api/subscriptions/jobs/SubscriptionJobs.ts +1 -1
- package/src/api/users/__tests__/AdminSessionController.spec.ts +37 -0
- package/src/api/users/audits/SessionAudits.ts +33 -0
- package/src/api/users/audits/UserAudits.ts +19 -43
- package/src/api/users/controllers/AdminUserController.ts +66 -1
- package/src/api/users/controllers/RealmController.ts +1 -0
- package/src/api/users/entities/sessions.ts +6 -0
- package/src/api/users/entities/users.ts +2 -0
- package/src/api/users/index.ts +9 -1
- package/src/api/users/primitives/$realm.ts +29 -0
- package/src/api/users/providers/RealmProvider.ts +15 -0
- package/src/api/users/schemas/realmConfigSchema.ts +14 -0
- package/src/api/users/schemas/sessionResourceSchema.ts +16 -0
- package/src/api/users/schemas/updateUserSchema.ts +1 -8
- package/src/api/users/schemas/userQuerySchema.ts +7 -0
- package/src/api/users/services/CredentialService.ts +15 -6
- package/src/api/users/services/IdentityService.ts +2 -1
- package/src/api/users/services/RegistrationService.ts +2 -1
- package/src/api/users/services/SessionCrudService.ts +19 -2
- package/src/api/users/services/SessionService.ts +39 -19
- package/src/api/users/services/UserService.ts +106 -8
- package/src/background/__tests__/BackgroundTaskProvider.spec.ts +96 -0
- package/src/background/index.ts +37 -0
- package/src/background/index.workerd.ts +28 -0
- package/src/background/providers/BackgroundTaskProvider.ts +70 -0
- package/src/background/providers/WorkerdBackgroundTaskProvider.ts +43 -0
- package/src/bucket/__tests__/$bucket.spec.ts +18 -0
- package/src/bucket/__tests__/LocalFileStorageProvider.spec.ts +5 -0
- package/src/bucket/__tests__/MemoryFileStorageProvider.spec.ts +5 -0
- package/src/bucket/__tests__/NodeS3BucketProvider.spec.ts +23 -4
- package/src/bucket/__tests__/shared.ts +30 -0
- package/src/bucket/index.ts +5 -5
- package/src/bucket/index.workerd.ts +11 -4
- package/src/bucket/primitives/$bucket.ts +27 -0
- package/src/bucket/providers/FileStorageProvider.ts +13 -0
- package/src/bucket/providers/LocalFileStorageProvider.ts +17 -1
- package/src/bucket/providers/MemoryFileStorageProvider.ts +7 -0
- package/src/bucket/providers/{CloudflareR2Provider.ts → R2FileStorageProvider.ts} +10 -1
- package/src/bucket/providers/{NodeS3BucketProvider.ts → S3FileStorageProvider.ts} +27 -5
- package/src/cli/core/__tests__/BuildDockerTask.spec.ts +25 -1
- package/src/cli/core/__tests__/init.spec.ts +0 -219
- package/src/cli/core/atoms/buildOptions.ts +0 -12
- package/src/cli/core/commands/__tests__/BuildCommand.spec.ts +43 -0
- package/src/cli/core/commands/build.ts +105 -37
- package/src/cli/core/commands/init.ts +0 -12
- package/src/cli/core/commands/pack.ts +133 -0
- package/src/cli/core/index.ts +3 -3
- package/src/cli/core/providers/ViteDevServerProvider.ts +40 -16
- package/src/cli/core/services/PackageManagerUtils.ts +0 -16
- package/src/cli/core/services/ProjectScaffolder.ts +29 -291
- package/src/cli/core/tasks/BuildCloudflareTask.ts +382 -56
- package/src/cli/core/tasks/BuildDockerTask.ts +33 -3
- package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
- package/src/cli/core/tasks/BuildTask.ts +34 -0
- package/src/cli/core/templates/apiIndexTs.ts +1 -22
- package/src/cli/core/templates/mainCss.ts +0 -1
- package/src/cli/core/templates/webAppRouterTs.ts +0 -99
- package/src/cli/core/templates/webIndexTs.ts +1 -22
- package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
- package/src/cli/i18n/services/I18nCheckService.ts +65 -11
- package/src/cli/platform/__tests__/SecretsCommand.spec.ts +5 -3
- package/src/cli/platform/commands/SecretsCommand.ts +8 -6
- package/src/cli/platform/commands/platform.ts +192 -46
- package/src/cli/platform/index.ts +12 -52
- package/src/cli/{platform → platform-lib}/__tests__/CloudflareAdapter.spec.ts +426 -169
- package/src/cli/{platform → platform-lib}/__tests__/NamingService.spec.ts +91 -4
- package/src/cli/{platform → platform-lib}/__tests__/VercelAdapter.spec.ts +56 -85
- package/src/cli/{platform → platform-lib}/adapters/CloudflareAdapter.ts +519 -190
- package/src/cli/{platform → platform-lib}/adapters/PlatformAdapter.ts +62 -35
- package/src/cli/{platform → platform-lib}/adapters/VercelAdapter.ts +6 -10
- package/src/cli/{platform → platform-lib}/atoms/platformOptions.ts +34 -1
- package/src/cli/platform-lib/index.ts +67 -0
- package/src/cli/platform-lib/services/NamingService.ts +136 -0
- package/src/cli/{platform → platform-lib}/services/PlatformInspector.ts +60 -13
- package/src/cli/{platform → platform-lib}/services/PlatformOrchestrator.ts +54 -43
- package/src/cli/{platform → platform-lib}/services/WranglerApi.ts +4 -2
- package/src/command/__tests__/Runner.spec.ts +20 -0
- package/src/command/helpers/EnvUtils.ts +19 -3
- package/src/command/helpers/Runner.ts +12 -2
- package/src/command/providers/CliProvider.ts +34 -1
- package/src/{containers → container}/core/__tests__/$container.spec.ts +5 -5
- package/src/{containers → container}/core/index.ts +4 -4
- package/src/{containers → container}/core/index.workerd.ts +19 -3
- package/src/{containers → container}/core/primitives/$container.ts +1 -1
- package/src/{containers → container}/core/providers/CloudflareContainerProvider.ts +17 -19
- package/src/{containers → container}/core/providers/ContainerProvider.ts +16 -2
- package/src/{containers → container}/core/providers/MockContainerProvider.ts +1 -1
- package/src/core/Alepha.ts +49 -1
- package/src/core/__tests__/$env.spec.ts +42 -0
- package/src/core/__tests__/dump.spec.ts +47 -0
- package/src/email/cloudflare/__tests__/CloudflareEmailProvider.spec.ts +42 -10
- package/src/email/cloudflare/index.ts +14 -5
- package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +54 -9
- package/src/logger/__tests__/Logger.spec.ts +55 -0
- package/src/logger/index.ts +13 -0
- package/src/logger/services/Logger.ts +31 -1
- package/src/mcp/__tests__/McpServerProvider.spec.ts +71 -0
- package/src/mcp/providers/McpServerProvider.ts +55 -0
- package/src/orm/__tests__/orm-showcase-tests.ts +27 -0
- package/src/orm/__tests__/orm-showcase.spec.ts +12 -0
- package/src/orm/core/interfaces/PgQuery.ts +4 -1
- package/src/orm/core/services/Repository.ts +27 -11
- package/src/react/auth/hooks/useAuth.ts +10 -5
- package/src/react/core/__tests__/useQuery.browser.spec.tsx +25 -0
- package/src/react/core/hooks/useAction.ts +14 -3
- package/src/react/core/hooks/useQuery.ts +24 -4
- 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/services/FormModel.ts +57 -39
- package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
- package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
- package/src/react/i18n/components/Translate.tsx +47 -0
- package/src/react/i18n/index.ts +2 -0
- package/src/react/i18n/providers/I18nProvider.ts +171 -12
- package/src/react/intro/components/GettingStartedAdminSlide.tsx +2 -2
- package/src/react/router/__tests__/$page.spec.tsx +3 -2
- package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
- package/src/react/router/__tests__/page-can.spec.ts +18 -13
- package/src/react/router/hooks/useQueryParams.ts +114 -14
- 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 +85 -4
- package/src/react/router/providers/ReactBrowserRouterProvider.ts +18 -8
- package/src/react/router/providers/ReactPageProvider.ts +12 -1
- package/src/react/router/providers/ReactServerProvider.ts +96 -14
- 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/services/SchemaControl.ts +3 -4
- package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
- package/src/server/auth/__tests__/authFederationClient.spec.ts +40 -0
- package/src/server/auth/__tests__/federationAssertion.spec.ts +146 -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/federationAssertion.ts +74 -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 +4 -0
- package/src/server/auth/primitives/$authFederationBroker.ts +273 -0
- package/src/server/auth/primitives/$authFederationClient.ts +89 -0
- package/src/server/auth/providers/ServerAuthProvider.ts +18 -4
- package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +70 -0
- package/src/server/cookies/providers/ServerCookiesProvider.ts +23 -3
- package/src/server/core/interfaces/ServerRequest.ts +8 -0
- package/src/server/core/primitives/$route.ts +27 -0
- package/src/server/core/providers/ServerMultipartProvider.ts +19 -0
- package/src/server/links/providers/LinkProvider.ts +10 -0
- package/dist/containers/core/index.d.ts.map +0 -1
- package/dist/containers/core/index.js.map +0 -1
- package/dist/containers/core/index.workerd.js.map +0 -1
- package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
- package/src/cli/core/templates/componentsJsonTs.ts +0 -39
- package/src/cli/core/templates/saasAdminLayoutTsx.ts +0 -77
- package/src/cli/core/templates/saasAdminPagesTsx.ts +0 -26
- package/src/cli/core/templates/saasAuthLayoutTsx.ts +0 -22
- package/src/cli/core/templates/saasAuthPagesTsx.ts +0 -62
- package/src/cli/core/templates/saasRealmProviderTs.ts +0 -52
- package/src/cli/platform/services/NamingService.ts +0 -54
- /package/dist/orm/core/{chunk-o8xxKEmq.js → chunk-B4FMCO8f.js} +0 -0
- /package/dist/react/testing/{chunk-6Ep1yQYe.js → chunk-BpyX8vjI.js} +0 -0
- /package/src/cli/{platform → platform-lib}/__tests__/GitHubSecretStore.spec.ts +0 -0
- /package/src/cli/{platform → platform-lib}/__tests__/PlatformCacheProvider.spec.ts +0 -0
- /package/src/cli/{platform → platform-lib}/__tests__/PlatformInspector.spec.ts +0 -0
- /package/src/cli/{platform → platform-lib}/__tests__/PlatformOrchestrator.spec.ts +0 -0
- /package/src/cli/{platform → platform-lib}/__tests__/SecretFilterService.spec.ts +0 -0
- /package/src/cli/{platform → platform-lib}/__tests__/detectResources.spec.ts +0 -0
- /package/src/cli/{platform → platform-lib}/providers/GitHubSecretStore.ts +0 -0
- /package/src/cli/{platform → platform-lib}/providers/MemorySecretStore.ts +0 -0
- /package/src/cli/{platform → platform-lib}/providers/PlatformCacheProvider.ts +0 -0
- /package/src/cli/{platform → platform-lib}/providers/SecretStoreProvider.ts +0 -0
- /package/src/cli/{platform → platform-lib}/schemas/cloudflare.ts +0 -0
- /package/src/cli/{platform → platform-lib}/schemas/platform.ts +0 -0
- /package/src/cli/{platform → platform-lib}/schemas/vercel.ts +0 -0
- /package/src/cli/{platform → platform-lib}/services/CloudflareApi.ts +0 -0
- /package/src/cli/{platform → platform-lib}/services/SecretFilterService.ts +0 -0
- /package/src/cli/{platform → platform-lib}/services/VercelApi.ts +0 -0
- /package/src/cli/{platform → platform-lib}/services/VercelCli.ts +0 -0
- /package/src/{containers → container}/core/interfaces/ContainerOptions.ts +0 -0
- /package/src/{containers → container}/core/providers/NodeContainerProvider.ts +0 -0
package/dist/bucket/index.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import * as _$alepha from "alepha";
|
|
2
1
|
import { Alepha, AlephaError, FileLike, KIND, Primitive, Service, Static } from "alepha";
|
|
3
2
|
import { FileDetector, FileSystemProvider } from "alepha/system";
|
|
4
3
|
import { CryptoProvider } from "alepha/crypto";
|
|
5
4
|
import * as fs from "node:fs";
|
|
6
|
-
import * as _$alepha_logger0 from "alepha/logger";
|
|
7
5
|
import { S3mini } from "s3mini";
|
|
8
6
|
import { R2Bucket } from "@cloudflare/workers-types";
|
|
9
|
-
import * as _$typebox from "typebox";
|
|
10
7
|
|
|
11
8
|
//#region ../../src/bucket/providers/FileStorageProvider.d.ts
|
|
12
9
|
declare abstract class FileStorageProvider {
|
|
@@ -50,6 +47,18 @@ declare abstract class FileStorageProvider {
|
|
|
50
47
|
* @param fileIds - Identifiers of the files to delete
|
|
51
48
|
*/
|
|
52
49
|
abstract deleteMany(bucketName: string, fileIds: string[]): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Lists the file identifiers stored in a bucket, like `ls` on a directory.
|
|
52
|
+
*
|
|
53
|
+
* This is a flat, unpaginated listing intended for small buckets. Providers
|
|
54
|
+
* cap the result at their natural page size (~1000 for S3/R2); anything beyond
|
|
55
|
+
* that is silently dropped. It is NOT a search API — use `alepha/api/files`
|
|
56
|
+
* when you need querying or pagination.
|
|
57
|
+
*
|
|
58
|
+
* @param bucketName - Container name
|
|
59
|
+
* @return The identifiers of the files in the bucket (empty if none).
|
|
60
|
+
*/
|
|
61
|
+
abstract list(bucketName: string): Promise<string[]>;
|
|
53
62
|
}
|
|
54
63
|
//#endregion
|
|
55
64
|
//#region ../../src/bucket/providers/MemoryFileStorageProvider.d.ts
|
|
@@ -69,6 +78,7 @@ declare class MemoryFileStorageProvider implements FileStorageProvider {
|
|
|
69
78
|
exists(bucketName: string, fileId: string): Promise<boolean>;
|
|
70
79
|
delete(bucketName: string, fileId: string): Promise<void>;
|
|
71
80
|
deleteMany(bucketName: string, fileIds: string[]): Promise<void>;
|
|
81
|
+
list(bucketName: string): Promise<string[]>;
|
|
72
82
|
protected createId(): string;
|
|
73
83
|
}
|
|
74
84
|
//#endregion
|
|
@@ -280,6 +290,15 @@ declare class BucketPrimitive extends Primitive<BucketPrimitiveOptions> {
|
|
|
280
290
|
* Checks if a file exists in the bucket.
|
|
281
291
|
*/
|
|
282
292
|
exists(fileId: string): Promise<boolean>;
|
|
293
|
+
/**
|
|
294
|
+
* Lists the file identifiers stored in the bucket, like `ls` on a directory.
|
|
295
|
+
*
|
|
296
|
+
* This is a flat, unpaginated listing meant for small buckets — the result is
|
|
297
|
+
* capped at the provider's natural page size (~1000 for S3/R2) and anything
|
|
298
|
+
* beyond that is silently dropped. It is NOT a search API; reach for
|
|
299
|
+
* `alepha/api/files` when you need querying or pagination.
|
|
300
|
+
*/
|
|
301
|
+
list(): Promise<string[]>;
|
|
283
302
|
/**
|
|
284
303
|
* Downloads a file from the bucket.
|
|
285
304
|
*/
|
|
@@ -308,7 +327,44 @@ declare class FileNotFoundError extends AlephaError {
|
|
|
308
327
|
readonly status = 404;
|
|
309
328
|
}
|
|
310
329
|
//#endregion
|
|
311
|
-
//#region ../../src/bucket/providers/
|
|
330
|
+
//#region ../../src/bucket/providers/LocalFileStorageProvider.d.ts
|
|
331
|
+
/**
|
|
332
|
+
* Local file storage configuration atom
|
|
333
|
+
*/
|
|
334
|
+
declare const localFileStorageOptions: import("alepha").Atom<import("typebox").TObject<{
|
|
335
|
+
storagePath: import("typebox").TString;
|
|
336
|
+
}>, "alepha.bucket.local.options">;
|
|
337
|
+
type LocalFileStorageProviderOptions = Static<typeof localFileStorageOptions.schema>;
|
|
338
|
+
declare module "alepha" {
|
|
339
|
+
interface State {
|
|
340
|
+
[localFileStorageOptions.key]: LocalFileStorageProviderOptions;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
declare class LocalFileStorageProvider implements FileStorageProvider {
|
|
344
|
+
protected readonly alepha: Alepha;
|
|
345
|
+
protected readonly log: import("alepha/logger").Logger;
|
|
346
|
+
protected readonly fileDetector: FileDetector;
|
|
347
|
+
protected readonly fileSystemProvider: FileSystemProvider;
|
|
348
|
+
protected readonly crypto: CryptoProvider;
|
|
349
|
+
protected readonly options: Readonly<{
|
|
350
|
+
storagePath: string;
|
|
351
|
+
}>;
|
|
352
|
+
protected get storagePath(): string;
|
|
353
|
+
protected readonly onConfigure: import("alepha").HookPrimitive<"configure">;
|
|
354
|
+
protected readonly onStart: import("alepha").HookPrimitive<"start">;
|
|
355
|
+
upload(bucketName: string, file: FileLike, fileId?: string): Promise<string>;
|
|
356
|
+
download(bucketName: string, fileId: string): Promise<FileLike>;
|
|
357
|
+
exists(bucketName: string, fileId: string): Promise<boolean>;
|
|
358
|
+
delete(bucketName: string, fileId: string): Promise<void>;
|
|
359
|
+
deleteMany(bucketName: string, fileIds: string[]): Promise<void>;
|
|
360
|
+
list(bucketName: string): Promise<string[]>;
|
|
361
|
+
protected stat(bucket: string, fileId: string): Promise<fs.Stats>;
|
|
362
|
+
protected createId(mimeType: string): string;
|
|
363
|
+
protected path(bucket: string, fileId?: string): string;
|
|
364
|
+
protected isErrorNoEntry(error: unknown): boolean;
|
|
365
|
+
}
|
|
366
|
+
//#endregion
|
|
367
|
+
//#region ../../src/bucket/providers/R2FileStorageProvider.d.ts
|
|
312
368
|
/**
|
|
313
369
|
* Cloudflare R2 storage provider.
|
|
314
370
|
*
|
|
@@ -354,9 +410,9 @@ declare class FileNotFoundError extends AlephaError {
|
|
|
354
410
|
* // Files stored at: myapp/avatars/uuid.png, myapp/documents/uuid.pdf
|
|
355
411
|
* ```
|
|
356
412
|
*/
|
|
357
|
-
declare class
|
|
413
|
+
declare class R2FileStorageProvider implements FileStorageProvider {
|
|
358
414
|
protected readonly alepha: Alepha;
|
|
359
|
-
protected readonly log:
|
|
415
|
+
protected readonly log: import("alepha/logger").Logger;
|
|
360
416
|
protected readonly crypto: CryptoProvider;
|
|
361
417
|
protected readonly env: {
|
|
362
418
|
R2_BUCKET_NAME: string;
|
|
@@ -371,12 +427,13 @@ declare class CloudflareR2Provider implements FileStorageProvider {
|
|
|
371
427
|
* Used for multi-app setups sharing the same R2 bucket.
|
|
372
428
|
*/
|
|
373
429
|
get prefix(): string | undefined;
|
|
374
|
-
protected readonly onStart:
|
|
430
|
+
protected readonly onStart: import("alepha").HookPrimitive<"start">;
|
|
375
431
|
upload(bucketName: string, file: FileLike, fileId?: string): Promise<string>;
|
|
376
432
|
download(bucketName: string, fileId: string): Promise<FileLike>;
|
|
377
433
|
exists(bucketName: string, fileId: string): Promise<boolean>;
|
|
378
434
|
delete(bucketName: string, fileId: string): Promise<void>;
|
|
379
435
|
deleteMany(bucketName: string, fileIds: string[]): Promise<void>;
|
|
436
|
+
list(bucketName: string): Promise<string[]>;
|
|
380
437
|
/**
|
|
381
438
|
* Build the full R2 key: {prefix}/{bucketName}/{fileId}
|
|
382
439
|
*/
|
|
@@ -385,44 +442,8 @@ declare class CloudflareR2Provider implements FileStorageProvider {
|
|
|
385
442
|
protected createId(filename: string): string;
|
|
386
443
|
}
|
|
387
444
|
//#endregion
|
|
388
|
-
//#region ../../src/bucket/providers/
|
|
389
|
-
|
|
390
|
-
* Local file storage configuration atom
|
|
391
|
-
*/
|
|
392
|
-
declare const localFileStorageOptions: _$alepha.Atom<_$typebox.TObject<{
|
|
393
|
-
storagePath: _$typebox.TString;
|
|
394
|
-
}>, "alepha.bucket.local.options">;
|
|
395
|
-
type LocalFileStorageProviderOptions = Static<typeof localFileStorageOptions.schema>;
|
|
396
|
-
declare module "alepha" {
|
|
397
|
-
interface State {
|
|
398
|
-
[localFileStorageOptions.key]: LocalFileStorageProviderOptions;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
declare class LocalFileStorageProvider implements FileStorageProvider {
|
|
402
|
-
protected readonly alepha: Alepha;
|
|
403
|
-
protected readonly log: _$alepha_logger0.Logger;
|
|
404
|
-
protected readonly fileDetector: FileDetector;
|
|
405
|
-
protected readonly fileSystemProvider: FileSystemProvider;
|
|
406
|
-
protected readonly crypto: CryptoProvider;
|
|
407
|
-
protected readonly options: Readonly<{
|
|
408
|
-
storagePath: string;
|
|
409
|
-
}>;
|
|
410
|
-
protected get storagePath(): string;
|
|
411
|
-
protected readonly onConfigure: _$alepha.HookPrimitive<"configure">;
|
|
412
|
-
protected readonly onStart: _$alepha.HookPrimitive<"start">;
|
|
413
|
-
upload(bucketName: string, file: FileLike, fileId?: string): Promise<string>;
|
|
414
|
-
download(bucketName: string, fileId: string): Promise<FileLike>;
|
|
415
|
-
exists(bucketName: string, fileId: string): Promise<boolean>;
|
|
416
|
-
delete(bucketName: string, fileId: string): Promise<void>;
|
|
417
|
-
deleteMany(bucketName: string, fileIds: string[]): Promise<void>;
|
|
418
|
-
protected stat(bucket: string, fileId: string): Promise<fs.Stats>;
|
|
419
|
-
protected createId(mimeType: string): string;
|
|
420
|
-
protected path(bucket: string, fileId?: string): string;
|
|
421
|
-
protected isErrorNoEntry(error: unknown): boolean;
|
|
422
|
-
}
|
|
423
|
-
//#endregion
|
|
424
|
-
//#region ../../src/bucket/providers/NodeS3BucketProvider.d.ts
|
|
425
|
-
declare const envSchema: _$alepha.TObject<{
|
|
445
|
+
//#region ../../src/bucket/providers/S3FileStorageProvider.d.ts
|
|
446
|
+
declare const envSchema: import("alepha").TObject<{
|
|
426
447
|
/**
|
|
427
448
|
* S3 endpoint URL. The bucket name is appended (path-style) per request.
|
|
428
449
|
*
|
|
@@ -432,21 +453,21 @@ declare const envSchema: _$alepha.TObject<{
|
|
|
432
453
|
* - MinIO: `http://localhost:9000`
|
|
433
454
|
* - DigitalOcean Spaces: `https://<region>.digitaloceanspaces.com`
|
|
434
455
|
*/
|
|
435
|
-
S3_ENDPOINT:
|
|
456
|
+
S3_ENDPOINT: import("alepha").TString;
|
|
436
457
|
/**
|
|
437
458
|
* AWS region or "auto" for R2.
|
|
438
459
|
*
|
|
439
460
|
* @default "auto"
|
|
440
461
|
*/
|
|
441
|
-
S3_REGION:
|
|
462
|
+
S3_REGION: import("alepha").TOptional<import("alepha").TString>;
|
|
442
463
|
/**
|
|
443
464
|
* Access key ID for S3 authentication.
|
|
444
465
|
*/
|
|
445
|
-
S3_ACCESS_KEY_ID:
|
|
466
|
+
S3_ACCESS_KEY_ID: import("alepha").TString;
|
|
446
467
|
/**
|
|
447
468
|
* Secret access key for S3 authentication.
|
|
448
469
|
*/
|
|
449
|
-
S3_SECRET_ACCESS_KEY:
|
|
470
|
+
S3_SECRET_ACCESS_KEY: import("alepha").TString;
|
|
450
471
|
}>;
|
|
451
472
|
declare module "alepha" {
|
|
452
473
|
interface Env extends Partial<Static<typeof envSchema>> {}
|
|
@@ -459,8 +480,8 @@ declare module "alepha" {
|
|
|
459
480
|
*
|
|
460
481
|
* Uses path-style addressing (`<endpoint>/<bucket>`).
|
|
461
482
|
*/
|
|
462
|
-
declare class
|
|
463
|
-
protected readonly log:
|
|
483
|
+
declare class S3FileStorageProvider implements FileStorageProvider {
|
|
484
|
+
protected readonly log: import("alepha/logger").Logger;
|
|
464
485
|
protected readonly env: {
|
|
465
486
|
S3_REGION?: string | undefined;
|
|
466
487
|
S3_ENDPOINT: string;
|
|
@@ -478,12 +499,13 @@ declare class NodeS3BucketProvider implements FileStorageProvider {
|
|
|
478
499
|
*/
|
|
479
500
|
convertName(name: string): string;
|
|
480
501
|
protected getClient(bucketName: string): S3mini;
|
|
481
|
-
protected readonly onStart:
|
|
502
|
+
protected readonly onStart: import("alepha").HookPrimitive<"start">;
|
|
482
503
|
protected createId(mimeType: string): string;
|
|
483
504
|
upload(bucketName: string, file: FileLike, fileId?: string): Promise<string>;
|
|
484
505
|
download(bucketName: string, fileId: string): Promise<FileLike>;
|
|
485
506
|
exists(bucketName: string, fileId: string): Promise<boolean>;
|
|
486
507
|
delete(bucketName: string, fileId: string): Promise<void>;
|
|
508
|
+
list(bucketName: string): Promise<string[]>;
|
|
487
509
|
deleteMany(bucketName: string, fileIds: string[]): Promise<void>;
|
|
488
510
|
}
|
|
489
511
|
//#endregion
|
|
@@ -531,7 +553,7 @@ declare module "alepha" {
|
|
|
531
553
|
*
|
|
532
554
|
* @module alepha.bucket
|
|
533
555
|
*/
|
|
534
|
-
declare const AlephaBucket:
|
|
556
|
+
declare const AlephaBucket: import("alepha").Service<import("alepha").Module>;
|
|
535
557
|
//#endregion
|
|
536
|
-
export { $bucket, AlephaBucket, BucketFileOptions, BucketPrimitive, BucketPrimitiveOptions,
|
|
558
|
+
export { $bucket, AlephaBucket, BucketFileOptions, BucketPrimitive, BucketPrimitiveOptions, FileNotFoundError, FileStorageProvider, LocalFileStorageProvider, LocalFileStorageProviderOptions, MemoryFileStorageProvider, R2FileStorageProvider, S3FileStorageProvider, localFileStorageOptions };
|
|
537
559
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/bucket/providers/FileStorageProvider.ts","../../src/bucket/providers/MemoryFileStorageProvider.ts","../../src/bucket/primitives/$bucket.ts","../../src/bucket/errors/FileNotFoundError.ts","../../src/bucket/providers/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/bucket/providers/FileStorageProvider.ts","../../src/bucket/providers/MemoryFileStorageProvider.ts","../../src/bucket/primitives/$bucket.ts","../../src/bucket/errors/FileNotFoundError.ts","../../src/bucket/providers/LocalFileStorageProvider.ts","../../src/bucket/providers/R2FileStorageProvider.ts","../../src/bucket/providers/S3FileStorageProvider.ts","../../src/bucket/index.ts"],"mappings":"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"}
|
package/dist/bucket/index.js
CHANGED
|
@@ -2,11 +2,12 @@ import { $atom, $env, $hook, $inject, $module, $state, Alepha, AlephaError, KIND
|
|
|
2
2
|
import { FileDetector, FileSystemProvider } from "alepha/system";
|
|
3
3
|
import { CryptoProvider } from "alepha/crypto";
|
|
4
4
|
import { createReadStream } from "node:fs";
|
|
5
|
-
import { mkdir, stat, unlink } from "node:fs/promises";
|
|
5
|
+
import { mkdir, readdir, stat, unlink } from "node:fs/promises";
|
|
6
6
|
import { tmpdir } from "node:os";
|
|
7
7
|
import { join } from "node:path";
|
|
8
8
|
import { $logger } from "alepha/logger";
|
|
9
9
|
import { Buffer as Buffer$1 } from "node:buffer";
|
|
10
|
+
import { Readable } from "node:stream";
|
|
10
11
|
import { S3mini } from "s3mini";
|
|
11
12
|
//#region ../../src/bucket/errors/InvalidFileError.ts
|
|
12
13
|
var InvalidFileError = class extends AlephaError {
|
|
@@ -62,6 +63,10 @@ var MemoryFileStorageProvider = class {
|
|
|
62
63
|
async deleteMany(bucketName, fileIds) {
|
|
63
64
|
for (const id of fileIds) delete this.files[`${bucketName}/${id}`];
|
|
64
65
|
}
|
|
66
|
+
async list(bucketName) {
|
|
67
|
+
const prefix = `${bucketName}/`;
|
|
68
|
+
return Object.keys(this.files).filter((key) => key.startsWith(prefix)).map((key) => key.slice(prefix.length));
|
|
69
|
+
}
|
|
65
70
|
createId() {
|
|
66
71
|
return this.crypto.randomUUID();
|
|
67
72
|
}
|
|
@@ -139,6 +144,11 @@ var BucketPrimitive = class extends Primitive {
|
|
|
139
144
|
const mimeType = file.type || "application/octet-stream";
|
|
140
145
|
if (!mimeTypes.includes(mimeType)) throw new InvalidFileError(`MIME type ${mimeType} is not allowed in bucket ${this.name}`);
|
|
141
146
|
}
|
|
147
|
+
if (file.size === 0) file = this.fileSystem.createFile({
|
|
148
|
+
arrayBuffer: await file.arrayBuffer(),
|
|
149
|
+
name: file.name,
|
|
150
|
+
type: file.type
|
|
151
|
+
});
|
|
142
152
|
if (file.size > maxSize * 1024 * 1024) throw new InvalidFileError(`File size ${file.size} exceeds the maximum size of ${maxSize} MB in bucket ${this.name}`);
|
|
143
153
|
const id = await this.provider.upload(this.name, file);
|
|
144
154
|
await this.alepha.events.emit("bucket:file:uploaded", {
|
|
@@ -181,6 +191,17 @@ var BucketPrimitive = class extends Primitive {
|
|
|
181
191
|
return this.provider.exists(this.name, fileId);
|
|
182
192
|
}
|
|
183
193
|
/**
|
|
194
|
+
* Lists the file identifiers stored in the bucket, like `ls` on a directory.
|
|
195
|
+
*
|
|
196
|
+
* This is a flat, unpaginated listing meant for small buckets — the result is
|
|
197
|
+
* capped at the provider's natural page size (~1000 for S3/R2) and anything
|
|
198
|
+
* beyond that is silently dropped. It is NOT a search API; reach for
|
|
199
|
+
* `alepha/api/files` when you need querying or pagination.
|
|
200
|
+
*/
|
|
201
|
+
async list() {
|
|
202
|
+
return this.provider.list(this.name);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
184
205
|
* Downloads a file from the bucket.
|
|
185
206
|
*/
|
|
186
207
|
async download(fileId) {
|
|
@@ -283,6 +304,14 @@ var LocalFileStorageProvider = class {
|
|
|
283
304
|
throw new AlephaError("Error deleting file", { cause: error });
|
|
284
305
|
})));
|
|
285
306
|
}
|
|
307
|
+
async list(bucketName) {
|
|
308
|
+
try {
|
|
309
|
+
return (await readdir(this.path(bucketName), { withFileTypes: true })).filter((entry) => entry.isFile()).map((entry) => entry.name);
|
|
310
|
+
} catch (error) {
|
|
311
|
+
if (this.isErrorNoEntry(error)) return [];
|
|
312
|
+
throw new AlephaError("Error listing files", { cause: error });
|
|
313
|
+
}
|
|
314
|
+
}
|
|
286
315
|
stat(bucket, fileId) {
|
|
287
316
|
return stat(this.path(bucket, fileId));
|
|
288
317
|
}
|
|
@@ -298,7 +327,7 @@ var LocalFileStorageProvider = class {
|
|
|
298
327
|
}
|
|
299
328
|
};
|
|
300
329
|
//#endregion
|
|
301
|
-
//#region ../../src/bucket/providers/
|
|
330
|
+
//#region ../../src/bucket/providers/S3FileStorageProvider.ts
|
|
302
331
|
const envSchema = t.object({
|
|
303
332
|
/**
|
|
304
333
|
* S3 endpoint URL. The bucket name is appended (path-style) per request.
|
|
@@ -333,7 +362,7 @@ const envSchema = t.object({
|
|
|
333
362
|
*
|
|
334
363
|
* Uses path-style addressing (`<endpoint>/<bucket>`).
|
|
335
364
|
*/
|
|
336
|
-
var
|
|
365
|
+
var S3FileStorageProvider = class {
|
|
337
366
|
log = $logger();
|
|
338
367
|
env = $env(envSchema);
|
|
339
368
|
alepha = $inject(Alepha);
|
|
@@ -402,15 +431,21 @@ var NodeS3BucketProvider = class {
|
|
|
402
431
|
this.log.trace(`Downloading file '${fileId}' from bucket '${bucketName}'...`);
|
|
403
432
|
const response = await this.getClient(bucketName).getObjectResponse(fileId);
|
|
404
433
|
if (!response) throw new FileNotFoundError(`File '${fileId}' not found in bucket '${bucketName}'`);
|
|
405
|
-
const buffer = Buffer$1.from(await response.arrayBuffer());
|
|
406
434
|
const mimeType = response.headers.get("content-type") || this.fileDetector.getContentType(fileId);
|
|
407
435
|
const metaName = response.headers.get("x-amz-meta-name");
|
|
408
436
|
const name = metaName ? decodeURIComponent(metaName) : fileId;
|
|
437
|
+
const contentLength = response.headers.get("content-length");
|
|
438
|
+
const size = contentLength ? Number.parseInt(contentLength, 10) : 0;
|
|
439
|
+
if (!response.body) return this.fileSystem.createFile({
|
|
440
|
+
buffer: Buffer$1.alloc(0),
|
|
441
|
+
name,
|
|
442
|
+
type: mimeType
|
|
443
|
+
});
|
|
409
444
|
return this.fileSystem.createFile({
|
|
410
|
-
|
|
445
|
+
stream: Readable.fromWeb(response.body),
|
|
411
446
|
name,
|
|
412
447
|
type: mimeType,
|
|
413
|
-
size
|
|
448
|
+
size
|
|
414
449
|
});
|
|
415
450
|
}
|
|
416
451
|
async exists(bucketName, fileId) {
|
|
@@ -428,6 +463,12 @@ var NodeS3BucketProvider = class {
|
|
|
428
463
|
throw error;
|
|
429
464
|
}
|
|
430
465
|
}
|
|
466
|
+
async list(bucketName) {
|
|
467
|
+
this.log.trace(`Listing files in bucket '${bucketName}'...`);
|
|
468
|
+
const objects = await this.getClient(bucketName).listObjects();
|
|
469
|
+
if (!objects) return [];
|
|
470
|
+
return objects.map((object) => object.Key);
|
|
471
|
+
}
|
|
431
472
|
async deleteMany(bucketName, fileIds) {
|
|
432
473
|
if (fileIds.length === 0) return;
|
|
433
474
|
this.log.trace(`Deleting ${fileIds.length} files from bucket '${bucketName}'...`);
|
|
@@ -447,7 +488,7 @@ var NodeS3BucketProvider = class {
|
|
|
447
488
|
}
|
|
448
489
|
};
|
|
449
490
|
//#endregion
|
|
450
|
-
//#region ../../src/bucket/providers/
|
|
491
|
+
//#region ../../src/bucket/providers/R2FileStorageProvider.ts
|
|
451
492
|
/**
|
|
452
493
|
* Cloudflare R2 storage provider.
|
|
453
494
|
*
|
|
@@ -493,7 +534,7 @@ var NodeS3BucketProvider = class {
|
|
|
493
534
|
* // Files stored at: myapp/avatars/uuid.png, myapp/documents/uuid.pdf
|
|
494
535
|
* ```
|
|
495
536
|
*/
|
|
496
|
-
var
|
|
537
|
+
var R2FileStorageProvider = class {
|
|
497
538
|
alepha = $inject(Alepha);
|
|
498
539
|
log = $logger();
|
|
499
540
|
crypto = $inject(CryptoProvider);
|
|
@@ -583,6 +624,12 @@ R2_BUCKET_NAME: t.string({ description: "R2 bucket name in Cloudflare" }) }));
|
|
|
583
624
|
this.log.trace(`Deleting ${keys.length} keys from '${bucketName}'`);
|
|
584
625
|
for (let i = 0; i < keys.length; i += 1e3) await r2.delete(keys.slice(i, i + 1e3));
|
|
585
626
|
}
|
|
627
|
+
async list(bucketName) {
|
|
628
|
+
const r2 = this.getR2();
|
|
629
|
+
const keyPrefix = this.key(bucketName, "");
|
|
630
|
+
this.log.trace(`Listing files in '${keyPrefix}'`);
|
|
631
|
+
return (await r2.list({ prefix: keyPrefix })).objects.map((object) => object.key.slice(keyPrefix.length));
|
|
632
|
+
}
|
|
586
633
|
/**
|
|
587
634
|
* Build the full R2 key: {prefix}/{bucketName}/{fileId}
|
|
588
635
|
*/
|
|
@@ -624,18 +671,18 @@ const AlephaBucket = $module({
|
|
|
624
671
|
variants: [
|
|
625
672
|
MemoryFileStorageProvider,
|
|
626
673
|
LocalFileStorageProvider,
|
|
627
|
-
|
|
674
|
+
S3FileStorageProvider
|
|
628
675
|
],
|
|
629
676
|
register: (alepha) => {
|
|
630
677
|
const useS3 = !!alepha.env.S3_ENDPOINT;
|
|
631
678
|
alepha.with({
|
|
632
679
|
optional: true,
|
|
633
680
|
provide: FileStorageProvider,
|
|
634
|
-
use: alepha.isTest() || alepha.isServerless() ? MemoryFileStorageProvider : useS3 ?
|
|
681
|
+
use: alepha.isTest() || alepha.isServerless() ? MemoryFileStorageProvider : useS3 ? S3FileStorageProvider : LocalFileStorageProvider
|
|
635
682
|
});
|
|
636
683
|
}
|
|
637
684
|
});
|
|
638
685
|
//#endregion
|
|
639
|
-
export { $bucket, AlephaBucket, BucketPrimitive,
|
|
686
|
+
export { $bucket, AlephaBucket, BucketPrimitive, FileNotFoundError, FileStorageProvider, LocalFileStorageProvider, MemoryFileStorageProvider, R2FileStorageProvider, S3FileStorageProvider, localFileStorageOptions };
|
|
640
687
|
|
|
641
688
|
//# sourceMappingURL=index.js.map
|