alepha 0.19.1 → 0.19.2
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/LICENSE +1 -1
- package/README.md +6 -9
- package/dist/api/audits/index.d.ts +378 -346
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/files/index.d.ts +216 -184
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/jobs/index.d.ts +528 -496
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +3 -3
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +207 -207
- package/dist/api/keys/index.d.ts.map +1 -1
- package/dist/api/notifications/index.d.ts +152 -152
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/organizations/index.browser.js +48 -0
- package/dist/api/organizations/index.browser.js.map +1 -0
- package/dist/api/organizations/index.d.ts +516 -0
- package/dist/api/organizations/index.d.ts.map +1 -0
- package/dist/api/organizations/index.js +202 -0
- package/dist/api/organizations/index.js.map +1 -0
- package/dist/api/parameters/index.d.ts +391 -358
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +5 -1
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.browser.js +7 -5
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +978 -913
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +160 -112
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +135 -135
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js +2 -2
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/batch/index.d.ts +6 -6
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/billing/index.d.ts +1048 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +713 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/bin/index.js +0 -2
- package/dist/bin/index.js.map +1 -1
- package/dist/bucket/index.d.ts +10 -10
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +2 -2
- package/dist/bucket/index.js.map +1 -1
- package/dist/cache/core/index.d.ts +9 -9
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/core/index.js +2 -2
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cache/core/index.workerd.js +2 -2
- package/dist/cache/core/index.workerd.js.map +1 -1
- package/dist/cache/redis/index.d.ts +6 -6
- 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/cli/config/index.d.ts +12 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +4 -0
- package/dist/cli/config/index.js.map +1 -1
- package/dist/cli/core/index.d.ts +183 -140
- package/dist/cli/core/index.d.ts.map +1 -1
- package/dist/cli/core/index.js +279 -89
- package/dist/cli/core/index.js.map +1 -1
- package/dist/cli/devtools/index.d.ts +45 -0
- package/dist/cli/devtools/index.d.ts.map +1 -0
- package/dist/cli/devtools/index.js +170 -0
- package/dist/cli/devtools/index.js.map +1 -0
- package/dist/cli/platform/index.d.ts +383 -492
- package/dist/cli/platform/index.d.ts.map +1 -1
- package/dist/cli/platform/index.js +42 -511
- package/dist/cli/platform/index.js.map +1 -1
- package/dist/cli/vendor/index.d.ts +196 -0
- package/dist/cli/vendor/index.d.ts.map +1 -0
- package/dist/cli/vendor/index.js +384 -0
- package/dist/cli/vendor/index.js.map +1 -0
- package/dist/command/index.d.ts +18 -18
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +2 -2
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +4 -4
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +10 -10
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -4
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +4 -4
- package/dist/core/index.native.js.map +1 -1
- package/dist/core/index.workerd.js +4 -4
- package/dist/core/index.workerd.js.map +1 -1
- package/dist/crypto/index.d.ts +7 -7
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/datetime/index.d.ts +4 -4
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/email/brevo/index.d.ts +4 -4
- package/dist/email/brevo/index.d.ts.map +1 -1
- package/dist/email/core/index.d.ts +15 -11
- package/dist/email/core/index.d.ts.map +1 -1
- package/dist/email/core/index.js +12 -35
- package/dist/email/core/index.js.map +1 -1
- package/dist/email/smtp/index.d.ts +12 -12
- package/dist/email/smtp/index.d.ts.map +1 -1
- package/dist/email/smtp/index.js +7 -4
- package/dist/email/smtp/index.js.map +1 -1
- package/dist/fake/index.d.ts +4 -8
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +55 -889
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +13 -13
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/core/index.js +2 -2
- package/dist/lock/core/index.js.map +1 -1
- package/dist/lock/redis/index.d.ts +4 -4
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/logger/index.d.ts +16 -15
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +5 -2
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +11 -11
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +2 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/core/index.browser.js +11 -1
- package/dist/orm/core/index.browser.js.map +1 -1
- package/dist/orm/core/index.bun.js +53 -16
- package/dist/orm/core/index.bun.js.map +1 -1
- package/dist/orm/core/index.d.ts +95 -51
- package/dist/orm/core/index.d.ts.map +1 -1
- package/dist/orm/core/index.js +55 -14
- package/dist/orm/core/index.js.map +1 -1
- package/dist/orm/postgres/index.d.ts +18 -17
- package/dist/orm/postgres/index.d.ts.map +1 -1
- package/dist/queue/core/index.d.ts +14 -14
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/core/index.js +2 -2
- package/dist/queue/core/index.js.map +1 -1
- package/dist/queue/core/index.workerd.js +2 -2
- package/dist/queue/core/index.workerd.js.map +1 -1
- package/dist/queue/redis/index.d.ts +4 -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.d.ts +9 -9
- package/dist/react/auth/index.d.ts.map +1 -1
- package/dist/react/core/index.d.ts +6 -6
- package/dist/react/core/index.d.ts.map +1 -1
- package/dist/react/core/index.js +5 -4
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +4 -4
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/head/index.d.ts +4 -4
- package/dist/react/head/index.d.ts.map +1 -1
- package/dist/react/i18n/index.d.ts +9 -9
- package/dist/react/i18n/index.d.ts.map +1 -1
- package/dist/react/intro/index.d.ts +2 -2
- package/dist/react/intro/index.d.ts.map +1 -1
- package/dist/react/intro/index.js +1 -1
- package/dist/react/intro/index.js.map +1 -1
- package/dist/react/router/index.browser.js +4 -5
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +215 -215
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +6 -7
- package/dist/react/router/index.js.map +1 -1
- package/dist/react/testing/index.d.ts +2 -2
- package/dist/react/testing/index.d.ts.map +1 -1
- package/dist/react/testing/index.js +2 -4
- package/dist/react/testing/index.js.map +1 -1
- package/dist/redis/index.d.ts +19 -19
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/retry/index.d.ts +4 -4
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +13 -13
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +2 -2
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/index.workerd.js +2 -2
- package/dist/scheduler/index.workerd.js.map +1 -1
- package/dist/security/index.browser.js +1 -1
- package/dist/security/index.browser.js.map +1 -1
- package/dist/security/index.d.ts +47 -47
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +9 -12
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +170 -169
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +16 -2
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cookies/index.d.ts +7 -7
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/core/index.d.ts +76 -76
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +23 -17
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +13 -13
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/cors/index.js +2 -2
- package/dist/server/cors/index.js.map +1 -1
- package/dist/server/etag/index.d.ts +9 -9
- package/dist/server/etag/index.d.ts.map +1 -1
- package/dist/server/health/index.d.ts +20 -20
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/links/index.browser.js +2 -2
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +66 -66
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +4 -4
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +7 -7
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +5 -5
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts +12 -12
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.js +2 -2
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/static/index.d.ts +5 -5
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/swagger/index.d.ts +7 -7
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +2 -2
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +11 -7
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +9 -15
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.d.ts +4 -4
- package/dist/system/index.d.ts.map +1 -1
- package/dist/topic/core/index.d.ts +6 -6
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts +7 -7
- 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/dist/websocket/index.d.ts +36 -36
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +2 -2
- package/dist/websocket/index.js.map +1 -1
- package/package.json +36 -14
- package/src/api/jobs/{services → __tests__}/JobService.spec.ts +1 -1
- package/src/api/jobs/providers/JobProvider.ts +3 -3
- package/src/api/keys/{services → __tests__}/ApiKeyService.spec.ts +1 -1
- package/src/api/organizations/__tests__/OrganizationService.spec.ts +193 -0
- package/src/api/organizations/controllers/AdminOrganizationController.ts +103 -0
- package/src/api/organizations/entities/organizations.ts +20 -0
- package/src/api/organizations/index.browser.ts +10 -0
- package/src/api/organizations/index.ts +31 -0
- package/src/api/organizations/schemas/createOrganizationSchema.ts +10 -0
- package/src/api/organizations/schemas/organizationQuerySchema.ts +10 -0
- package/src/api/organizations/schemas/organizationResourceSchema.ts +6 -0
- package/src/api/organizations/schemas/updateOrganizationSchema.ts +7 -0
- package/src/api/organizations/services/OrganizationService.ts +75 -0
- package/src/api/parameters/services/ParameterProvider.ts +6 -1
- package/src/api/users/{services → __tests__}/SessionService.spec.ts +67 -0
- package/src/api/users/{jobs → __tests__}/UserJobs.spec.ts +1 -1
- package/src/api/users/entities/users.ts +9 -3
- package/src/api/users/index.ts +23 -4
- package/src/api/users/primitives/$realm.ts +6 -4
- package/src/api/users/providers/RealmProvider.ts +1 -1
- package/src/api/users/services/RegistrationService.ts +1 -1
- package/src/api/users/services/SessionService.ts +92 -5
- package/src/api/users/services/UserService.ts +1 -1
- package/src/api/verifications/{jobs → __tests__}/VerificationJobs.spec.ts +4 -2
- package/src/api/verifications/parameters/VerificationParameters.ts +2 -2
- package/src/billing/__tests__/BillingService.spec.ts +136 -0
- package/src/billing/__tests__/PaymentMethodService.spec.ts +78 -0
- package/src/billing/controllers/AdminBillingController.ts +149 -0
- package/src/billing/controllers/BillingController.ts +108 -0
- package/src/billing/entities/paymentIntents.ts +34 -0
- package/src/billing/entities/paymentMethods.ts +24 -0
- package/src/billing/entities/refunds.ts +22 -0
- package/src/billing/errors/BillingError.ts +5 -0
- package/src/billing/index.ts +76 -0
- package/src/billing/providers/BillingProvider.ts +79 -0
- package/src/billing/providers/MemoryBillingProvider.ts +139 -0
- package/src/billing/schemas/intentSchemas.ts +60 -0
- package/src/billing/schemas/paymentMethodSchemas.ts +13 -0
- package/src/billing/schemas/refundSchemas.ts +6 -0
- package/src/billing/services/BillingService.ts +325 -0
- package/src/billing/services/PaymentMethodService.ts +82 -0
- package/src/bin/index.ts +0 -2
- package/src/bucket/providers/LocalFileStorageProvider.ts +2 -2
- package/src/cache/core/{primitives → __tests__}/$cache.middleware.spec.ts +1 -1
- package/src/cache/core/{providers → __tests__}/MemoryCacheProvider.spec.ts +1 -1
- package/src/cache/core/primitives/$cache.ts +2 -2
- package/src/cache/redis/providers/RedisCacheProvider.ts +2 -2
- package/src/cli/config/defineConfig.ts +20 -0
- package/src/cli/core/{services → __tests__}/ProjectScaffolder.spec.ts +1 -1
- package/src/cli/core/{commands/gen → __tests__}/changelog.spec.ts +1 -1
- package/src/cli/core/{commands → __tests__}/init.spec.ts +2 -8
- package/src/cli/core/atoms/devOptions.ts +0 -5
- package/src/cli/core/commands/build.ts +2 -2
- package/src/cli/core/commands/dev.ts +165 -30
- package/src/cli/core/commands/gen/changelog.ts +2 -2
- package/src/cli/core/commands/init.ts +2 -7
- package/src/cli/core/commands/verify.ts +0 -1
- package/src/cli/core/providers/AppEntryProvider.ts +2 -2
- package/src/cli/core/providers/ViteDevServerProvider.ts +54 -66
- package/src/cli/core/services/PackageManagerUtils.ts +8 -3
- package/src/cli/core/services/ProjectScaffolder.ts +18 -18
- package/src/cli/core/tasks/BuildClientTask.ts +8 -0
- package/src/cli/core/tasks/BuildServerTask.ts +17 -4
- package/src/cli/core/templates/alephaConfigTs.ts +0 -6
- package/src/cli/core/templates/webAdminDashboardTsx.ts +17 -0
- package/src/cli/core/templates/webAppRouterTs.ts +85 -2
- package/src/cli/devtools/atoms/devtoolsOptions.ts +26 -0
- package/src/cli/devtools/index.ts +194 -0
- package/src/cli/platform/{adapters → __tests__}/CloudflareAdapter.spec.ts +2 -2
- package/src/cli/platform/{providers → __tests__}/GitHubSecretStore.spec.ts +1 -1
- package/src/cli/platform/{services → __tests__}/NamingService.spec.ts +1 -1
- package/src/cli/platform/{providers → __tests__}/PlatformCacheProvider.spec.ts +1 -1
- package/src/cli/platform/{services → __tests__}/PlatformInspector.spec.ts +1 -1
- package/src/cli/platform/{services → __tests__}/PlatformOrchestrator.spec.ts +3 -3
- package/src/cli/platform/{services → __tests__}/SecretFilterService.spec.ts +1 -1
- package/src/cli/platform/{commands → __tests__}/SecretsCommand.spec.ts +1 -1
- package/src/cli/platform/{adapters → __tests__}/VercelAdapter.spec.ts +2 -2
- package/src/cli/platform/atoms/platformOptions.ts +2 -10
- package/src/cli/platform/commands/SecretsCommand.ts +2 -2
- package/src/cli/platform/commands/platform.ts +2 -11
- package/src/cli/platform/index.ts +34 -11
- package/src/cli/platform/services/PlatformInspector.ts +2 -2
- package/src/cli/platform/services/PlatformOrchestrator.ts +0 -9
- package/src/cli/vendor/__tests__/VendorService.spec.ts +407 -0
- package/src/cli/vendor/atoms/vendorOptions.ts +41 -0
- package/src/cli/vendor/commands/VendorCommand.ts +204 -0
- package/src/cli/vendor/index.ts +43 -0
- package/src/cli/vendor/services/VendorService.ts +338 -0
- package/src/command/{providers → __tests__}/CliProvider.spec.ts +1 -1
- package/src/command/{helpers → __tests__}/EnvUtils.spec.ts +1 -1
- package/src/command/providers/CliProvider.ts +2 -2
- package/src/core/{primitives → __tests__}/$atom.spec.ts +2 -2
- package/src/core/{primitives → __tests__}/$memoize.spec.ts +1 -1
- package/src/core/{primitives → __tests__}/$mode.spec.ts +1 -1
- package/src/core/{primitives → __tests__}/$pipeline.spec.ts +1 -1
- package/src/core/{primitives → __tests__}/$scope.spec.ts +2 -2
- package/src/core/{providers → __tests__}/KeylessJsonSchemaCodec.spec.ts +1 -1
- package/src/core/{providers → __tests__}/SchemaValidator.spec.ts +1 -1
- package/src/core/{helpers → __tests__}/jsonSchemaToTypeBox.spec.ts +1 -1
- package/src/core/index.shared.ts +1 -1
- package/src/core/primitives/{$use.ts → $state.ts} +4 -4
- package/src/crypto/{providers → __tests__}/BrowserCryptoProvider.browser.spec.ts +1 -1
- package/src/crypto/{providers → __tests__}/CryptoProvider.spec.ts +1 -1
- package/src/datetime/{primitives → __tests__}/$debounce.spec.ts +1 -1
- package/src/datetime/{primitives → __tests__}/$throttle.spec.ts +1 -1
- package/src/datetime/{primitives → __tests__}/$timeout.spec.ts +1 -1
- package/src/email/brevo/{providers → __tests__}/BrevoEmailProvider.spec.ts +1 -1
- package/src/email/core/{providers → __tests__}/LocalEmailProvider.spec.ts +39 -150
- package/src/email/core/providers/LocalEmailProvider.ts +13 -51
- package/src/email/smtp/providers/NodemailerEmailProvider.ts +2 -2
- package/src/lock/core/{primitives → __tests__}/$lock.middleware.spec.ts +1 -1
- package/src/lock/core/primitives/$lock.ts +2 -2
- package/src/logger/index.ts +10 -4
- package/src/mcp/transports/SseMcpTransport.ts +2 -2
- package/src/orm/__tests__/ModelBuilder-tests.ts +53 -0
- package/src/orm/__tests__/ModelBuilder.spec.ts +80 -0
- package/src/orm/__tests__/organization-tests.ts +200 -0
- package/src/orm/__tests__/organization.spec.ts +103 -0
- package/src/orm/core/{providers/drivers → __tests__}/BunSqliteProvider.bun.spec.ts +5 -2
- package/src/orm/core/constants/PG_SYMBOLS.ts +2 -0
- package/src/orm/core/index.shared.ts +1 -0
- package/src/orm/core/primitives/$entity.ts +31 -0
- package/src/orm/core/providers/DatabaseTypeProvider.ts +11 -0
- package/src/orm/core/providers/DrizzleKitProvider.ts +1 -1
- package/src/orm/core/providers/drivers/BunSqliteProvider.ts +2 -2
- package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +3 -3
- package/src/orm/core/services/ModelBuilder.ts +11 -0
- package/src/orm/core/services/QueryManager.ts +16 -2
- package/src/orm/core/services/Repository.ts +70 -10
- package/src/orm/postgres/{providers → __tests__}/BunPostgresProvider.bun.spec.ts +1 -1
- package/src/queue/core/providers/WorkerProvider.ts +2 -2
- package/src/queue/redis/providers/RedisQueueProvider.ts +2 -2
- package/src/react/core/{hooks → __tests__}/useAction.browser.spec.tsx +1 -1
- package/src/react/core/hooks/useAction.ts +7 -6
- package/src/react/head/{providers → __tests__}/BrowserHeadProvider.browser.spec.ts +1 -1
- package/src/react/head/{helpers → __tests__}/SeoExpander.spec.ts +1 -1
- package/src/react/i18n/{providers → __tests__}/I18nProvider.spec.ts +1 -1
- package/src/react/i18n/{hooks → __tests__}/useI18n.browser.spec.tsx +1 -1
- package/src/react/intro/components/GettingStartedDevtoolsSlide.tsx +1 -1
- package/src/react/router/{providers → __tests__}/ReactBrowserProvider.browser.spec.ts +1 -1
- package/src/react/router/providers/ReactBrowserProvider.ts +2 -2
- package/src/react/router/providers/ReactPageProvider.ts +2 -2
- package/src/react/router/providers/ReactServerProvider.ts +3 -3
- package/src/redis/{providers → __tests__}/BunRedisProvider.bun.spec.ts +4 -4
- package/src/retry/{primitives → __tests__}/$retry.middleware.spec.ts +1 -1
- package/src/router/{TemplatedPathParser.spec.ts → __tests__/TemplatedPathParser.spec.ts} +1 -1
- package/src/scheduler/primitives/$scheduler.ts +2 -2
- package/src/security/{primitives → __tests__}/$secure-browser.spec.ts +1 -1
- package/src/security/{primitives → __tests__}/$secure.spec.ts +1 -1
- package/src/security/primitives/$issuer.ts +1 -1
- package/src/security/providers/JwtProvider.ts +6 -10
- package/src/security/providers/SecurityProvider.ts +6 -11
- package/src/security/schemas/userAccountInfoSchema.ts +3 -3
- package/src/server/auth/providers/ServerAuthProvider.ts +24 -2
- package/src/server/cookies/{services → __tests__}/CookieParser.spec.ts +1 -1
- package/src/server/core/{primitives → __tests__}/$circuit.spec.ts +1 -1
- package/src/server/core/{providers → __tests__}/NodeHttpServerProvider.spec.ts +1 -1
- package/src/server/core/{providers → __tests__}/ServerBodyParserProvider.spec.ts +31 -1
- package/src/server/core/{providers → __tests__}/ServerCompressProvider.spec.ts +1 -1
- package/src/server/core/{providers → __tests__}/ServerHelmetProvider.spec.ts +4 -1
- package/src/server/core/{providers → __tests__}/ServerMultipartProvider.spec.ts +1 -1
- package/src/server/core/{services → __tests__}/ServerRequestParser.spec.ts +1 -1
- package/src/server/core/primitives/$action.ts +2 -2
- package/src/server/core/primitives/$sse.ts +2 -2
- package/src/server/core/providers/ServerBodyParserProvider.ts +21 -12
- package/src/server/core/providers/ServerCompressProvider.ts +2 -2
- package/src/server/core/providers/ServerHelmetProvider.ts +2 -2
- package/src/server/core/providers/ServerMultipartProvider.ts +2 -2
- package/src/server/core/providers/ServerRouterProvider.ts +1 -5
- package/src/server/cors/{primitives → __tests__}/$cors.spec.ts +1 -1
- package/src/server/cors/providers/ServerCorsProvider.ts +2 -2
- package/src/server/links/{services → __tests__}/BatchCollector.spec.ts +1 -1
- package/src/server/links/providers/LinkProvider.ts +2 -2
- package/src/server/links/providers/RemotePrimitiveProvider.ts +2 -2
- package/src/server/links/providers/ServerLinksProvider.ts +2 -2
- package/src/server/rate-limit/{primitives → __tests__}/$rateLimit.spec.ts +1 -1
- package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +2 -2
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +2 -2
- package/src/sms/{providers → __tests__}/LocalSmsProvider.spec.ts +35 -29
- package/src/sms/providers/LocalSmsProvider.ts +13 -24
- package/src/system/{providers → __tests__}/MemoryFileSystemProvider.spec.ts +1 -1
- package/src/system/{providers → __tests__}/MemoryShellProvider.spec.ts +1 -1
- package/src/topic/redis/providers/RedisTopicProvider.ts +2 -2
- package/src/websocket/{services → __tests__}/RoomManager.spec.ts +1 -1
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +2 -2
- package/tsconfig.base.json +1 -0
- package/src/cli/platform/adapters/DockerAdapter.spec.ts +0 -378
- package/src/cli/platform/adapters/DockerAdapter.ts +0 -417
- package/src/cli/platform/services/DockerComposeGenerator.spec.ts +0 -490
- package/src/cli/platform/services/DockerComposeGenerator.ts +0 -353
- package/src/cli/platform/services/DockerSshService.spec.ts +0 -47
- package/src/cli/platform/services/DockerSshService.ts +0 -61
- /package/src/api/audits/{primitives → __tests__}/$audit.spec.ts +0 -0
- /package/src/api/audits/{services → __tests__}/AuditService.spec.ts +0 -0
- /package/src/api/files/{controllers → __tests__}/AdminFileStatsController.spec.ts +0 -0
- /package/src/api/files/{controllers → __tests__}/FileController.spec.ts +0 -0
- /package/src/api/files/{jobs → __tests__}/FileJobs.spec.ts +0 -0
- /package/src/api/files/{services → __tests__}/FileService.spec.ts +0 -0
- /package/src/api/jobs/{primitives → __tests__}/$job-middleware.spec.ts +0 -0
- /package/src/api/parameters/{primitives → __tests__}/$parameter.spec.ts +0 -0
- /package/src/api/users/{primitives → __tests__}/$realm.spec.ts +0 -0
- /package/src/api/users/{controllers → __tests__}/AdminIdentityController.spec.ts +0 -0
- /package/src/api/users/{controllers → __tests__}/AdminSessionController.spec.ts +0 -0
- /package/src/api/users/{controllers → __tests__}/AdminUserController.spec.ts +0 -0
- /package/src/api/users/{services → __tests__}/CredentialService.spec.ts +0 -0
- /package/src/api/users/{providers → __tests__}/RealmProvider.spec.ts +0 -0
- /package/src/api/users/{services → __tests__}/RegistrationService.spec.ts +0 -0
- /package/src/batch/{primitives → __tests__}/$batch.spec.ts +0 -0
- /package/src/batch/{providers → __tests__}/BatchProvider.spec.ts +0 -0
- /package/src/bucket/{primitives → __tests__}/$bucket.spec.ts +0 -0
- /package/src/bucket/{providers → __tests__}/FileStorageProvider.spec.ts +0 -0
- /package/src/bucket/{providers → __tests__}/LocalFileStorageProvider.spec.ts +0 -0
- /package/src/bucket/{providers → __tests__}/MemoryFileStorageProvider.spec.ts +0 -0
- /package/src/cache/core/{primitives → __tests__}/$cache.spec.ts +0 -0
- /package/src/cache/redis/{providers → __tests__}/RedisCacheProvider.spec.ts +0 -0
- /package/src/command/{primitives → __tests__}/$command.spec.ts +0 -0
- /package/src/command/{helpers → __tests__}/Asker.spec.ts +0 -0
- /package/src/command/{helpers → __tests__}/Runner.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$context.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$env.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$hook.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$inject.spec.ts +0 -0
- /package/src/core/{primitives → __tests__}/$module.spec.ts +0 -0
- /package/src/core/{providers → __tests__}/CodecManager.spec.ts +0 -0
- /package/src/core/{providers → __tests__}/EventManager.spec.ts +0 -0
- /package/src/core/{providers → __tests__}/StateManager.spec.ts +0 -0
- /package/src/core/{providers → __tests__}/TypeProvider.spec.ts +0 -0
- /package/src/datetime/{primitives → __tests__}/$interval.spec.ts +0 -0
- /package/src/datetime/{providers → __tests__}/DateTimeProvider.spec.ts +0 -0
- /package/src/email/core/{primitives → __tests__}/$email.spec.ts +0 -0
- /package/src/fake/{providers → __tests__}/FakeProvider.spec.ts +0 -0
- /package/src/lock/core/{providers → __tests__}/MemoryLockProvider.spec.ts +0 -0
- /package/src/lock/redis/{providers → __tests__}/RedisLockProvider.spec.ts +0 -0
- /package/src/logger/{primitives → __tests__}/$logger.spec.ts +0 -0
- /package/src/logger/{services → __tests__}/Logger.spec.ts +0 -0
- /package/src/mcp/{primitives → __tests__}/$prompt.spec.ts +0 -0
- /package/src/mcp/{primitives → __tests__}/$resource.spec.ts +0 -0
- /package/src/mcp/{primitives → __tests__}/$tool.spec.ts +0 -0
- /package/src/mcp/{providers → __tests__}/McpServerProvider.spec.ts +0 -0
- /package/src/mcp/{helpers → __tests__}/jsonrpc.spec.ts +0 -0
- /package/src/orm/core/{helpers → __tests__}/parseQueryString.spec.ts +0 -0
- /package/src/queue/core/{primitives → __tests__}/$consumer.spec.ts +0 -0
- /package/src/queue/core/{providers → __tests__}/MemoryQueueProvider.spec.ts +0 -0
- /package/src/queue/core/{providers → __tests__}/WorkerProvider.spec.ts +0 -0
- /package/src/queue/redis/{providers → __tests__}/RedisQueueProvider.spec.ts +0 -0
- /package/src/react/form/{hooks → __tests__}/useForm.browser.spec.tsx +0 -0
- /package/src/react/head/{hooks → __tests__}/useHead.spec.tsx +0 -0
- /package/src/react/i18n/{components → __tests__}/Localize.spec.tsx +0 -0
- /package/src/react/router/{primitives → __tests__}/$page.browser.spec.tsx +0 -0
- /package/src/react/router/{primitives → __tests__}/$page.middleware.spec.tsx +0 -0
- /package/src/react/router/{primitives → __tests__}/$page.spec.tsx +0 -0
- /package/src/react/router/{providers → __tests__}/ReactPreloadProvider.spec.ts +0 -0
- /package/src/react/router/{providers → __tests__}/ReactServerProvider.spec.tsx +0 -0
- /package/src/react/router/{providers → __tests__}/ReactServerTemplateProvider.spec.ts +0 -0
- /package/src/retry/{primitives → __tests__}/$retry.spec.ts +0 -0
- /package/src/retry/{providers → __tests__}/RetryProvider.spec.ts +0 -0
- /package/src/router/{providers → __tests__}/RouterProvider.spec.ts +0 -0
- /package/src/security/{primitives → __tests__}/$issuer.spec.ts +0 -0
- /package/src/security/{primitives → __tests__}/$permission.spec.ts +0 -0
- /package/src/security/{primitives → __tests__}/$role.spec.ts +0 -0
- /package/src/security/{primitives → __tests__}/$serviceAccount.spec.ts +0 -0
- /package/src/security/{providers → __tests__}/SecurityProvider.spec.ts +0 -0
- /package/src/server/cookies/{providers → __tests__}/ServerCookiesProvider.spec.ts +0 -0
- /package/src/server/core/{primitives → __tests__}/$action.spec.ts +0 -0
- /package/src/server/core/{primitives → __tests__}/$middleware.spec.ts +0 -0
- /package/src/server/core/{primitives → __tests__}/$route.spec.ts +0 -0
- /package/src/server/core/{primitives → __tests__}/$sse.spec.ts +0 -0
- /package/src/server/core/{providers → __tests__}/BunHttpServerProvider.bun.spec.ts +0 -0
- /package/src/server/core/{services → __tests__}/HttpClient.spec.ts +0 -0
- /package/src/server/core/{providers → __tests__}/ServerLoggerProvider.spec.ts +0 -0
- /package/src/server/core/{services → __tests__}/UserAgentParser.spec.ts +0 -0
- /package/src/server/cors/{providers → __tests__}/ServerCorsProvider.spec.ts +0 -0
- /package/src/server/etag/{providers → __tests__}/ServerEtagProvider.spec.ts +0 -0
- /package/src/server/health/{providers → __tests__}/ServerHealthProvider.spec.ts +0 -0
- /package/src/server/links/{primitives → __tests__}/$remote.spec.ts +0 -0
- /package/src/server/links/{services → __tests__}/BatchEndpoint.spec.ts +0 -0
- /package/src/server/links/{providers → __tests__}/LinkProvider.spec.ts +0 -0
- /package/src/server/links/{providers → __tests__}/ServerLinksProvider.spec.ts +0 -0
- /package/src/server/metrics/{providers → __tests__}/ServerMetricsProvider.spec.ts +0 -0
- /package/src/server/proxy/{primitives → __tests__}/$proxy.spec.ts +0 -0
- /package/src/server/rate-limit/{providers → __tests__}/ServerRateLimitProvider.spec.ts +0 -0
- /package/src/server/static/{primitives → __tests__}/$serve.spec.ts +0 -0
- /package/src/server/swagger/{primitives → __tests__}/$swagger.spec.ts +0 -0
- /package/src/sms/{primitives → __tests__}/$sms.spec.ts +0 -0
- /package/src/sms/{providers → __tests__}/MemorySmsProvider.spec.ts +0 -0
- /package/src/system/{services → __tests__}/FileDetector.spec.ts +0 -0
- /package/src/system/{providers → __tests__}/NodeFileSystemProvider.spec.ts +0 -0
- /package/src/topic/core/{primitives → __tests__}/$subscriber.spec.ts +0 -0
- /package/src/topic/core/{providers → __tests__}/MemoryTopicProvider.spec.ts +0 -0
- /package/src/topic/redis/{providers → __tests__}/RedisTopicProvider.spec.ts +0 -0
- /package/src/websocket/{primitives → __tests__}/$channel.spec.ts +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { $atom, $inject, $module, $
|
|
1
|
+
import { $atom, $inject, $module, $state, Alepha, AlephaError, t } from "alepha";
|
|
2
2
|
import { AlephaCli, AlephaCliUtils, AppEntryProvider, PackageManagerUtils, ViteBuildProvider } from "alepha/cli";
|
|
3
3
|
import { $command, Asker, EnvUtils, Runner } from "alepha/command";
|
|
4
4
|
import { $logger, ConsoleColorProvider } from "alepha/logger";
|
|
5
5
|
import { FileSystemProvider, ShellProvider } from "alepha/system";
|
|
6
6
|
import { DateTimeProvider } from "alepha/datetime";
|
|
7
|
-
import { dirname, join } from "node:path";
|
|
8
7
|
import { homedir, platform } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
9
|
//#region ../../src/cli/platform/providers/PlatformCacheProvider.ts
|
|
10
10
|
/**
|
|
11
11
|
* Caches cloud provider login state to avoid slow auth checks.
|
|
@@ -977,483 +977,6 @@ var CloudflareAdapter = class CloudflareAdapter extends PlatformAdapter {
|
|
|
977
977
|
}
|
|
978
978
|
};
|
|
979
979
|
//#endregion
|
|
980
|
-
//#region ../../src/cli/platform/services/DockerComposeGenerator.ts
|
|
981
|
-
/**
|
|
982
|
-
* Generates docker-compose.yml content for local, remote, and shared Traefik.
|
|
983
|
-
*
|
|
984
|
-
* Pure logic — no I/O, no DI. Takes context, returns YAML string.
|
|
985
|
-
*/
|
|
986
|
-
var DockerComposeGenerator = class {
|
|
987
|
-
/**
|
|
988
|
-
* Generate the shared Traefik compose.
|
|
989
|
-
*
|
|
990
|
-
* This is a static singleton — one per VPS at /opt/alepha/traefik/.
|
|
991
|
-
* It creates the alepha-proxy network that project composes connect to.
|
|
992
|
-
*/
|
|
993
|
-
generateTraefik() {
|
|
994
|
-
return [
|
|
995
|
-
"# Auto-generated by Alepha. Do not edit.",
|
|
996
|
-
"services:",
|
|
997
|
-
" traefik:",
|
|
998
|
-
" image: traefik:v3",
|
|
999
|
-
" container_name: alepha-traefik",
|
|
1000
|
-
" command:",
|
|
1001
|
-
" - --providers.docker=true",
|
|
1002
|
-
" - --providers.docker.exposedbydefault=false",
|
|
1003
|
-
" - --entrypoints.web.address=:80",
|
|
1004
|
-
" - --entrypoints.websecure.address=:443",
|
|
1005
|
-
" - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web",
|
|
1006
|
-
" - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json",
|
|
1007
|
-
" ports:",
|
|
1008
|
-
" - \"80:80\"",
|
|
1009
|
-
" - \"443:443\"",
|
|
1010
|
-
" volumes:",
|
|
1011
|
-
" - /var/run/docker.sock:/var/run/docker.sock",
|
|
1012
|
-
" - traefik_certs:/letsencrypt",
|
|
1013
|
-
" networks:",
|
|
1014
|
-
" - alepha-proxy",
|
|
1015
|
-
" restart: unless-stopped",
|
|
1016
|
-
"",
|
|
1017
|
-
"networks:",
|
|
1018
|
-
" alepha-proxy:",
|
|
1019
|
-
" name: alepha-proxy",
|
|
1020
|
-
"",
|
|
1021
|
-
"volumes:",
|
|
1022
|
-
" traefik_certs:",
|
|
1023
|
-
""
|
|
1024
|
-
].join("\n");
|
|
1025
|
-
}
|
|
1026
|
-
/**
|
|
1027
|
-
* Generate compose for local dev (services only: postgres, redis).
|
|
1028
|
-
* Returns null if no services are needed.
|
|
1029
|
-
*/
|
|
1030
|
-
generateLocal(options) {
|
|
1031
|
-
const services = [];
|
|
1032
|
-
const volumes = [];
|
|
1033
|
-
const needsPostgres = this.anyAppHas(options.apps, "hasDatabase") && !options.envVars.DATABASE_URL;
|
|
1034
|
-
const needsRedis = (this.anyAppHas(options.apps, "hasKV") || this.anyAppHas(options.apps, "hasQueue")) && !options.envVars.REDIS_URL;
|
|
1035
|
-
const needsRustFS = this.anyAppHas(options.apps, "hasBucket") && !options.envVars.S3_ENDPOINT;
|
|
1036
|
-
if (needsPostgres) {
|
|
1037
|
-
const dbName = `${options.project}_${options.env}`.replace(/-/g, "_");
|
|
1038
|
-
services.push([
|
|
1039
|
-
" postgres:",
|
|
1040
|
-
" image: postgres:17-alpine",
|
|
1041
|
-
" ports: [\"5432:5432\"]",
|
|
1042
|
-
" environment:",
|
|
1043
|
-
` POSTGRES_DB: ${dbName}`,
|
|
1044
|
-
" POSTGRES_USER: alepha",
|
|
1045
|
-
" POSTGRES_PASSWORD: alepha",
|
|
1046
|
-
" volumes:",
|
|
1047
|
-
" - postgres_data:/var/lib/postgresql/data"
|
|
1048
|
-
].join("\n"));
|
|
1049
|
-
volumes.push(" postgres_data:");
|
|
1050
|
-
}
|
|
1051
|
-
if (needsRedis) services.push([
|
|
1052
|
-
" redis:",
|
|
1053
|
-
" image: redis:7-alpine",
|
|
1054
|
-
" ports: [\"6379:6379\"]"
|
|
1055
|
-
].join("\n"));
|
|
1056
|
-
if (needsRustFS) {
|
|
1057
|
-
services.push([
|
|
1058
|
-
" rustfs:",
|
|
1059
|
-
" image: rustfs/rustfs:latest",
|
|
1060
|
-
" ports: [\"9000:9000\"]",
|
|
1061
|
-
" environment:",
|
|
1062
|
-
" RUSTFS_ROOT_USER: alepha",
|
|
1063
|
-
" RUSTFS_ROOT_PASSWORD: alepha",
|
|
1064
|
-
" volumes:",
|
|
1065
|
-
" - rustfs_data:/data"
|
|
1066
|
-
].join("\n"));
|
|
1067
|
-
volumes.push(" rustfs_data:");
|
|
1068
|
-
}
|
|
1069
|
-
if (services.length === 0) return null;
|
|
1070
|
-
const parts = [
|
|
1071
|
-
"# Auto-generated by Alepha. Do not edit.",
|
|
1072
|
-
"services:",
|
|
1073
|
-
...services
|
|
1074
|
-
];
|
|
1075
|
-
if (volumes.length > 0) parts.push("", "volumes:", ...volumes);
|
|
1076
|
-
return `${parts.join("\n")}\n`;
|
|
1077
|
-
}
|
|
1078
|
-
/**
|
|
1079
|
-
* Generate compose for a remote project.
|
|
1080
|
-
*
|
|
1081
|
-
* - With `domain`: app connects to shared alepha-proxy network + Traefik labels
|
|
1082
|
-
* - Without `domain`: app exposed directly on port 3000, no Traefik involvement
|
|
1083
|
-
*
|
|
1084
|
-
* Traefik itself is NEVER in this compose — it's a separate shared compose.
|
|
1085
|
-
*/
|
|
1086
|
-
generateRemote(options) {
|
|
1087
|
-
const hasDomain = !!options.domain || Object.keys(options.domains ?? {}).length > 0;
|
|
1088
|
-
const services = [];
|
|
1089
|
-
const volumes = [];
|
|
1090
|
-
const isMultiApp = options.apps.length > 1;
|
|
1091
|
-
const needsInternal = hasDomain && this.anyAppNeedsInternal(options.apps, options.envVars);
|
|
1092
|
-
for (let i = 0; i < options.apps.length; i++) {
|
|
1093
|
-
const app = options.apps[i];
|
|
1094
|
-
const serviceName = isMultiApp ? `app-${app.name}` : "app";
|
|
1095
|
-
const buildPath = isMultiApp ? `./dist/${app.name}` : "./dist";
|
|
1096
|
-
const appLines = [
|
|
1097
|
-
` ${serviceName}:`,
|
|
1098
|
-
` build: ${buildPath}`,
|
|
1099
|
-
` env_file: .env.${options.env}`
|
|
1100
|
-
];
|
|
1101
|
-
const appDomain = this.resolveAppDomain(app.name, isMultiApp, options.domain, options.domains);
|
|
1102
|
-
if (appDomain) {
|
|
1103
|
-
const routerName = serviceName.replace(/-/g, "");
|
|
1104
|
-
appLines.push(" labels:", " - traefik.enable=true", ` - traefik.http.routers.${routerName}.rule=Host(\`${appDomain}\`)`, ` - traefik.http.routers.${routerName}.tls.certresolver=letsencrypt`, " networks:", " - alepha-proxy");
|
|
1105
|
-
if (needsInternal) appLines.push(" - internal");
|
|
1106
|
-
} else {
|
|
1107
|
-
const port = 3e3 + i;
|
|
1108
|
-
appLines.push(" ports:", ` - "${port}:3000"`);
|
|
1109
|
-
}
|
|
1110
|
-
appLines.push(" restart: unless-stopped");
|
|
1111
|
-
const deps = [];
|
|
1112
|
-
if (app.resources.hasDatabase && !options.envVars.DATABASE_URL) deps.push(" - postgres");
|
|
1113
|
-
if ((app.resources.hasKV || app.resources.hasQueue) && !options.envVars.REDIS_URL) deps.push(" - redis");
|
|
1114
|
-
if (app.resources.hasBucket && !options.envVars.S3_ENDPOINT) deps.push(" - rustfs");
|
|
1115
|
-
if (deps.length > 0) appLines.push(" depends_on:", ...deps);
|
|
1116
|
-
services.push(appLines.join("\n"));
|
|
1117
|
-
}
|
|
1118
|
-
if (this.anyAppHas(options.apps, "hasDatabase") && !options.envVars.DATABASE_URL) {
|
|
1119
|
-
const pgLines = [
|
|
1120
|
-
" postgres:",
|
|
1121
|
-
" image: postgres:17-alpine",
|
|
1122
|
-
" environment:",
|
|
1123
|
-
` POSTGRES_DB: ${`${options.project}_${options.env}`.replace(/-/g, "_")}`,
|
|
1124
|
-
" POSTGRES_USER: alepha",
|
|
1125
|
-
" POSTGRES_PASSWORD: ${DB_PASSWORD}",
|
|
1126
|
-
" volumes:",
|
|
1127
|
-
" - postgres_data:/var/lib/postgresql/data"
|
|
1128
|
-
];
|
|
1129
|
-
if (hasDomain) pgLines.push(" networks:", " - internal");
|
|
1130
|
-
pgLines.push(" restart: unless-stopped");
|
|
1131
|
-
services.push(pgLines.join("\n"));
|
|
1132
|
-
volumes.push(" postgres_data:");
|
|
1133
|
-
}
|
|
1134
|
-
if ((this.anyAppHas(options.apps, "hasKV") || this.anyAppHas(options.apps, "hasQueue")) && !options.envVars.REDIS_URL) {
|
|
1135
|
-
const redisLines = [" redis:", " image: redis:7-alpine"];
|
|
1136
|
-
if (hasDomain) redisLines.push(" networks:", " - internal");
|
|
1137
|
-
redisLines.push(" restart: unless-stopped");
|
|
1138
|
-
services.push(redisLines.join("\n"));
|
|
1139
|
-
}
|
|
1140
|
-
if (this.anyAppHas(options.apps, "hasBucket") && !options.envVars.S3_ENDPOINT) {
|
|
1141
|
-
const rustfsLines = [
|
|
1142
|
-
" rustfs:",
|
|
1143
|
-
" image: rustfs/rustfs:latest",
|
|
1144
|
-
" environment:",
|
|
1145
|
-
" RUSTFS_ROOT_USER: alepha",
|
|
1146
|
-
" RUSTFS_ROOT_PASSWORD: ${S3_SECRET_KEY}",
|
|
1147
|
-
" volumes:",
|
|
1148
|
-
" - rustfs_data:/data"
|
|
1149
|
-
];
|
|
1150
|
-
if (hasDomain) rustfsLines.push(" networks:", " - internal");
|
|
1151
|
-
rustfsLines.push(" restart: unless-stopped");
|
|
1152
|
-
services.push(rustfsLines.join("\n"));
|
|
1153
|
-
volumes.push(" rustfs_data:");
|
|
1154
|
-
}
|
|
1155
|
-
const parts = [
|
|
1156
|
-
"# Auto-generated by Alepha. Do not edit.",
|
|
1157
|
-
"services:",
|
|
1158
|
-
...services
|
|
1159
|
-
];
|
|
1160
|
-
if (hasDomain) {
|
|
1161
|
-
parts.push("", "networks:", " alepha-proxy:", " external: true");
|
|
1162
|
-
if (needsInternal) parts.push(" internal:");
|
|
1163
|
-
}
|
|
1164
|
-
if (volumes.length > 0) parts.push("", "volumes:", ...volumes);
|
|
1165
|
-
return `${parts.join("\n")}\n`;
|
|
1166
|
-
}
|
|
1167
|
-
/**
|
|
1168
|
-
* Resolve the domain for an app.
|
|
1169
|
-
*
|
|
1170
|
-
* Priority:
|
|
1171
|
-
* 1. `domains[appName]` — explicit override (e.g. shop → myshop.com)
|
|
1172
|
-
* 2. `<appName>.<domain>` — convention for multi-app (e.g. api → api.company.com)
|
|
1173
|
-
* 3. `domain` — used directly for single-app projects (e.g. myapp.com)
|
|
1174
|
-
*/
|
|
1175
|
-
resolveAppDomain(appName, isMultiApp, domain, domains) {
|
|
1176
|
-
if (domains?.[appName]) return domains[appName];
|
|
1177
|
-
if (domain && isMultiApp) return `${appName}.${domain}`;
|
|
1178
|
-
return domain;
|
|
1179
|
-
}
|
|
1180
|
-
anyAppHas(apps, resource) {
|
|
1181
|
-
return apps.some((app) => app.resources[resource]);
|
|
1182
|
-
}
|
|
1183
|
-
anyAppNeedsInternal(apps, envVars) {
|
|
1184
|
-
return this.anyAppHas(apps, "hasDatabase") && !envVars.DATABASE_URL || (this.anyAppHas(apps, "hasKV") || this.anyAppHas(apps, "hasQueue")) && !envVars.REDIS_URL || this.anyAppHas(apps, "hasBucket") && !envVars.S3_ENDPOINT;
|
|
1185
|
-
}
|
|
1186
|
-
};
|
|
1187
|
-
//#endregion
|
|
1188
|
-
//#region ../../src/cli/platform/services/DockerSshService.ts
|
|
1189
|
-
/**
|
|
1190
|
-
* Wraps SSH and SCP operations for remote Docker deployments.
|
|
1191
|
-
*/
|
|
1192
|
-
var DockerSshService = class {
|
|
1193
|
-
shell = $inject(ShellProvider);
|
|
1194
|
-
/**
|
|
1195
|
-
* Validate an IP address or hostname to prevent shell injection.
|
|
1196
|
-
*/
|
|
1197
|
-
validateHost(ip) {
|
|
1198
|
-
if (!/^[a-zA-Z0-9.:_-]+$/.test(ip)) throw new AlephaError(`Invalid host: ${ip}`);
|
|
1199
|
-
}
|
|
1200
|
-
/**
|
|
1201
|
-
* Validate a file path to prevent shell injection.
|
|
1202
|
-
*/
|
|
1203
|
-
validatePath(path) {
|
|
1204
|
-
if (/[;&|`$(){}'"\\!#~<>*?[\]\n\r]/.test(path)) throw new AlephaError(`Invalid path: ${path}`);
|
|
1205
|
-
}
|
|
1206
|
-
/**
|
|
1207
|
-
* Verify SSH connectivity to the remote host.
|
|
1208
|
-
*/
|
|
1209
|
-
async checkConnection(ip) {
|
|
1210
|
-
this.validateHost(ip);
|
|
1211
|
-
await this.shell.run(`ssh root@${ip} echo ok`);
|
|
1212
|
-
}
|
|
1213
|
-
/**
|
|
1214
|
-
* Execute a command on the remote host via SSH.
|
|
1215
|
-
*/
|
|
1216
|
-
async exec(ip, command) {
|
|
1217
|
-
this.validateHost(ip);
|
|
1218
|
-
const escaped = command.replace(/'/g, "'\\''");
|
|
1219
|
-
return this.shell.run(`ssh root@${ip} '${escaped}'`, { capture: true });
|
|
1220
|
-
}
|
|
1221
|
-
/**
|
|
1222
|
-
* Upload a file to the remote host via SCP.
|
|
1223
|
-
*/
|
|
1224
|
-
async upload(ip, localPath, remotePath) {
|
|
1225
|
-
this.validateHost(ip);
|
|
1226
|
-
this.validatePath(localPath);
|
|
1227
|
-
this.validatePath(remotePath);
|
|
1228
|
-
await this.shell.run(`scp ${localPath} root@${ip}:${remotePath}`);
|
|
1229
|
-
}
|
|
1230
|
-
};
|
|
1231
|
-
//#endregion
|
|
1232
|
-
//#region ../../src/cli/platform/adapters/DockerAdapter.ts
|
|
1233
|
-
/**
|
|
1234
|
-
* Docker platform adapter.
|
|
1235
|
-
*
|
|
1236
|
-
* Handles both local development (docker compose for services)
|
|
1237
|
-
* and remote VPS deployment (SSH + Docker).
|
|
1238
|
-
*
|
|
1239
|
-
* Mode is determined by the `ip` field in environment config:
|
|
1240
|
-
* - No `ip`: local mode — compose up services (Postgres, Redis)
|
|
1241
|
-
* - With `ip`: remote mode — SSH to VPS, push dist, compose up
|
|
1242
|
-
*
|
|
1243
|
-
* Traefik is a shared singleton per VPS at /opt/alepha/traefik/.
|
|
1244
|
-
* Auto-provisioned on first deploy with `domain`, skipped if already running.
|
|
1245
|
-
*/
|
|
1246
|
-
var DockerAdapter = class extends PlatformAdapter {
|
|
1247
|
-
log = $logger();
|
|
1248
|
-
fs = $inject(FileSystemProvider);
|
|
1249
|
-
shell = $inject(ShellProvider);
|
|
1250
|
-
envUtils = $inject(EnvUtils);
|
|
1251
|
-
generator = $inject(DockerComposeGenerator);
|
|
1252
|
-
ssh = $inject(DockerSshService);
|
|
1253
|
-
TRAEFIK_PATH = "/opt/alepha/traefik";
|
|
1254
|
-
TRAEFIK_CONTAINER = "alepha-traefik";
|
|
1255
|
-
isRemote(ctx) {
|
|
1256
|
-
return !!ctx.envConfig.ip;
|
|
1257
|
-
}
|
|
1258
|
-
composePath(ctx) {
|
|
1259
|
-
return this.fs.join(ctx.root, "node_modules/.alepha/docker-compose.yml");
|
|
1260
|
-
}
|
|
1261
|
-
remotePath(ctx) {
|
|
1262
|
-
return `/opt/alepha/${ctx.project}-${ctx.env}`;
|
|
1263
|
-
}
|
|
1264
|
-
async authenticate(ctx, run) {
|
|
1265
|
-
await run({
|
|
1266
|
-
name: "authenticate",
|
|
1267
|
-
handler: async () => {
|
|
1268
|
-
await this.shell.run("docker --version");
|
|
1269
|
-
if (this.isRemote(ctx)) await this.ssh.checkConnection(ctx.envConfig.ip);
|
|
1270
|
-
}
|
|
1271
|
-
});
|
|
1272
|
-
}
|
|
1273
|
-
async build(ctx, run) {
|
|
1274
|
-
if (!this.isRemote(ctx)) return;
|
|
1275
|
-
await run("alepha build -t docker", { root: ctx.app.path ? this.fs.join(ctx.root, ctx.app.path) : ctx.root });
|
|
1276
|
-
}
|
|
1277
|
-
async deploy(ctx, run) {
|
|
1278
|
-
if (!this.isRemote(ctx)) return;
|
|
1279
|
-
const ip = ctx.envConfig.ip;
|
|
1280
|
-
const remote = this.remotePath(ctx);
|
|
1281
|
-
await run({
|
|
1282
|
-
name: "deploy",
|
|
1283
|
-
handler: async () => {
|
|
1284
|
-
await this.shell.run("tar czf dist.tar.gz dist", { root: ctx.root });
|
|
1285
|
-
await this.ssh.exec(ip, `mkdir -p ${remote}`);
|
|
1286
|
-
await this.ssh.upload(ip, this.fs.join(ctx.root, "dist.tar.gz"), `${remote}/dist.tar.gz`);
|
|
1287
|
-
await this.ssh.exec(ip, `cd ${remote} && tar xzf dist.tar.gz && docker compose build && docker compose up -d`);
|
|
1288
|
-
}
|
|
1289
|
-
});
|
|
1290
|
-
return ctx.envConfig.domain ? `https://${ctx.envConfig.domain}` : void 0;
|
|
1291
|
-
}
|
|
1292
|
-
async provision(ctx, run) {
|
|
1293
|
-
const envVars = await this.envUtils.parseEnv(ctx.root, [`.env.${ctx.env}`, ".env"]);
|
|
1294
|
-
if (this.isRemote(ctx)) await this.provisionRemote(ctx, run, envVars);
|
|
1295
|
-
else await this.provisionLocal(ctx, run, envVars);
|
|
1296
|
-
}
|
|
1297
|
-
async provisionLocal(ctx, run, envVars) {
|
|
1298
|
-
const compose = this.generator.generateLocal({
|
|
1299
|
-
project: ctx.project,
|
|
1300
|
-
env: ctx.env,
|
|
1301
|
-
naming: ctx.naming,
|
|
1302
|
-
apps: ctx.apps,
|
|
1303
|
-
envVars
|
|
1304
|
-
});
|
|
1305
|
-
if (!compose) return;
|
|
1306
|
-
await run({
|
|
1307
|
-
name: "provision (docker compose)",
|
|
1308
|
-
handler: async () => {
|
|
1309
|
-
const composePath = this.composePath(ctx);
|
|
1310
|
-
await this.fs.mkdir(dirname(composePath), { recursive: true });
|
|
1311
|
-
await this.fs.writeFile(composePath, compose);
|
|
1312
|
-
await this.shell.run(`docker compose -f ${composePath} -p ${ctx.project}-${ctx.env} up -d`);
|
|
1313
|
-
}
|
|
1314
|
-
});
|
|
1315
|
-
}
|
|
1316
|
-
async provisionRemote(ctx, run, envVars) {
|
|
1317
|
-
const ip = ctx.envConfig.ip;
|
|
1318
|
-
const remote = this.remotePath(ctx);
|
|
1319
|
-
if (!!ctx.envConfig.domain || Object.keys(ctx.envConfig.domains ?? {}).length > 0) await this.ensureTraefik(ip, run);
|
|
1320
|
-
const compose = this.generator.generateRemote({
|
|
1321
|
-
project: ctx.project,
|
|
1322
|
-
env: ctx.env,
|
|
1323
|
-
naming: ctx.naming,
|
|
1324
|
-
domain: ctx.envConfig.domain,
|
|
1325
|
-
domains: ctx.envConfig.domains,
|
|
1326
|
-
apps: ctx.apps,
|
|
1327
|
-
envVars
|
|
1328
|
-
});
|
|
1329
|
-
await run({
|
|
1330
|
-
name: "provision (remote)",
|
|
1331
|
-
handler: async () => {
|
|
1332
|
-
const localCompose = this.composePath(ctx);
|
|
1333
|
-
await this.fs.mkdir(dirname(localCompose), { recursive: true });
|
|
1334
|
-
await this.fs.writeFile(localCompose, compose);
|
|
1335
|
-
await this.ssh.exec(ip, `mkdir -p ${remote}`);
|
|
1336
|
-
await this.ssh.upload(ip, localCompose, `${remote}/docker-compose.yml`);
|
|
1337
|
-
const envFile = this.fs.join(ctx.root, `.env.${ctx.env}`);
|
|
1338
|
-
if (await this.fs.exists(envFile)) await this.ssh.upload(ip, envFile, `${remote}/.env.${ctx.env}`);
|
|
1339
|
-
}
|
|
1340
|
-
});
|
|
1341
|
-
}
|
|
1342
|
-
/**
|
|
1343
|
-
* Ensure the shared Traefik instance is running on the VPS.
|
|
1344
|
-
* If already running, this is a no-op.
|
|
1345
|
-
*/
|
|
1346
|
-
async ensureTraefik(ip, run) {
|
|
1347
|
-
if ((await this.ssh.exec(ip, `docker ps --filter name=${this.TRAEFIK_CONTAINER} --format '{{.Names}}'`)).trim() === this.TRAEFIK_CONTAINER) return;
|
|
1348
|
-
await run({
|
|
1349
|
-
name: "provision (shared traefik)",
|
|
1350
|
-
handler: async () => {
|
|
1351
|
-
const traefikCompose = this.generator.generateTraefik();
|
|
1352
|
-
const localPath = this.fs.join("node_modules/.alepha/traefik-compose.yml");
|
|
1353
|
-
await this.fs.mkdir(dirname(localPath), { recursive: true });
|
|
1354
|
-
await this.fs.writeFile(localPath, traefikCompose);
|
|
1355
|
-
await this.ssh.exec(ip, `mkdir -p ${this.TRAEFIK_PATH}`);
|
|
1356
|
-
await this.ssh.upload(ip, localPath, `${this.TRAEFIK_PATH}/docker-compose.yml`);
|
|
1357
|
-
await this.ssh.exec(ip, `cd ${this.TRAEFIK_PATH} && docker compose up -d`);
|
|
1358
|
-
}
|
|
1359
|
-
});
|
|
1360
|
-
}
|
|
1361
|
-
async migrate(ctx, run) {
|
|
1362
|
-
if (!ctx.apps.some((app) => app.resources.hasDatabase)) return;
|
|
1363
|
-
await run({
|
|
1364
|
-
name: "migrate",
|
|
1365
|
-
handler: async () => {
|
|
1366
|
-
if (this.isRemote(ctx)) {
|
|
1367
|
-
const ip = ctx.envConfig.ip;
|
|
1368
|
-
const remote = this.remotePath(ctx);
|
|
1369
|
-
await this.ssh.exec(ip, `cd ${remote} && docker compose exec app node -e "require('./migrate')"`);
|
|
1370
|
-
} else await this.shell.run("alepha db migrations apply", { root: ctx.root });
|
|
1371
|
-
}
|
|
1372
|
-
});
|
|
1373
|
-
}
|
|
1374
|
-
async secrets(ctx, run) {
|
|
1375
|
-
if (!this.isRemote(ctx)) return;
|
|
1376
|
-
const ip = ctx.envConfig.ip;
|
|
1377
|
-
const remote = this.remotePath(ctx);
|
|
1378
|
-
const envFile = this.fs.join(ctx.root, `.env.${ctx.env}`);
|
|
1379
|
-
if (!await this.fs.exists(envFile)) return;
|
|
1380
|
-
await run({
|
|
1381
|
-
name: "push secrets",
|
|
1382
|
-
handler: async () => {
|
|
1383
|
-
await this.ssh.upload(ip, envFile, `${remote}/.env.${ctx.env}`);
|
|
1384
|
-
}
|
|
1385
|
-
});
|
|
1386
|
-
}
|
|
1387
|
-
async inspect(ctx, run) {
|
|
1388
|
-
const state = {
|
|
1389
|
-
workers: [],
|
|
1390
|
-
databases: [],
|
|
1391
|
-
buckets: [],
|
|
1392
|
-
kvNamespaces: [],
|
|
1393
|
-
queues: [],
|
|
1394
|
-
secrets: []
|
|
1395
|
-
};
|
|
1396
|
-
await run({
|
|
1397
|
-
name: "inspect",
|
|
1398
|
-
handler: async () => {
|
|
1399
|
-
if (this.isRemote(ctx)) {
|
|
1400
|
-
const ip = ctx.envConfig.ip;
|
|
1401
|
-
const remote = this.remotePath(ctx);
|
|
1402
|
-
try {
|
|
1403
|
-
const output = await this.ssh.exec(ip, `cd ${remote} && docker compose ps --format json 2>/dev/null || echo "[]"`);
|
|
1404
|
-
const containers = this.parseContainers(output);
|
|
1405
|
-
for (const c of containers) state.workers.push({
|
|
1406
|
-
name: c.name,
|
|
1407
|
-
exists: c.state === "running",
|
|
1408
|
-
detail: c.state
|
|
1409
|
-
});
|
|
1410
|
-
} catch {}
|
|
1411
|
-
} else {
|
|
1412
|
-
const composePath = this.composePath(ctx);
|
|
1413
|
-
if (await this.fs.exists(composePath)) try {
|
|
1414
|
-
const output = await this.shell.run(`docker compose -f ${composePath} -p ${ctx.project}-${ctx.env} ps --format json`, { capture: true });
|
|
1415
|
-
const containers = this.parseContainers(output);
|
|
1416
|
-
for (const c of containers) state.workers.push({
|
|
1417
|
-
name: c.name,
|
|
1418
|
-
exists: c.state === "running",
|
|
1419
|
-
detail: c.state
|
|
1420
|
-
});
|
|
1421
|
-
} catch {}
|
|
1422
|
-
}
|
|
1423
|
-
}
|
|
1424
|
-
});
|
|
1425
|
-
return state;
|
|
1426
|
-
}
|
|
1427
|
-
async teardown(ctx, run) {
|
|
1428
|
-
await run({
|
|
1429
|
-
name: "teardown",
|
|
1430
|
-
handler: async () => {
|
|
1431
|
-
if (this.isRemote(ctx)) {
|
|
1432
|
-
const ip = ctx.envConfig.ip;
|
|
1433
|
-
const remote = this.remotePath(ctx);
|
|
1434
|
-
await this.ssh.exec(ip, `cd ${remote} && docker compose down`);
|
|
1435
|
-
} else {
|
|
1436
|
-
const composePath = this.composePath(ctx);
|
|
1437
|
-
if (await this.fs.exists(composePath)) await this.shell.run(`docker compose -f ${composePath} -p ${ctx.project}-${ctx.env} down`);
|
|
1438
|
-
}
|
|
1439
|
-
}
|
|
1440
|
-
});
|
|
1441
|
-
}
|
|
1442
|
-
parseContainers(output) {
|
|
1443
|
-
try {
|
|
1444
|
-
return output.trim().split("\n").filter(Boolean).map((line) => {
|
|
1445
|
-
const obj = JSON.parse(line);
|
|
1446
|
-
return {
|
|
1447
|
-
name: obj.Name ?? obj.Service ?? "unknown",
|
|
1448
|
-
state: obj.State ?? "unknown"
|
|
1449
|
-
};
|
|
1450
|
-
});
|
|
1451
|
-
} catch {
|
|
1452
|
-
return [];
|
|
1453
|
-
}
|
|
1454
|
-
}
|
|
1455
|
-
};
|
|
1456
|
-
//#endregion
|
|
1457
980
|
//#region ../../src/cli/platform/schemas/vercel.ts
|
|
1458
981
|
const vercelProjectSchema = t.object({
|
|
1459
982
|
id: t.string(),
|
|
@@ -1912,16 +1435,9 @@ const platformOptions = $atom({
|
|
|
1912
1435
|
environmentPattern: t.optional(t.text())
|
|
1913
1436
|
})),
|
|
1914
1437
|
environments: t.record(t.text(), t.object({
|
|
1915
|
-
adapter: t.enum([
|
|
1916
|
-
"cloudflare",
|
|
1917
|
-
"vercel",
|
|
1918
|
-
"docker",
|
|
1919
|
-
"docker-compose",
|
|
1920
|
-
"aks"
|
|
1921
|
-
]),
|
|
1438
|
+
adapter: t.enum(["cloudflare", "vercel"]),
|
|
1922
1439
|
domain: t.optional(t.text()),
|
|
1923
|
-
domains: t.optional(t.record(t.text(), t.text()))
|
|
1924
|
-
ip: t.optional(t.text())
|
|
1440
|
+
domains: t.optional(t.record(t.text(), t.text()))
|
|
1925
1441
|
}))
|
|
1926
1442
|
}))
|
|
1927
1443
|
});
|
|
@@ -1982,7 +1498,7 @@ var PlatformInspector = class {
|
|
|
1982
1498
|
alepha = $inject(Alepha);
|
|
1983
1499
|
fs = $inject(FileSystemProvider);
|
|
1984
1500
|
asker = $inject(Asker);
|
|
1985
|
-
options = $
|
|
1501
|
+
options = $state(platformOptions);
|
|
1986
1502
|
naming = $inject(NamingService);
|
|
1987
1503
|
/**
|
|
1988
1504
|
* Resolve and validate the full platform configuration.
|
|
@@ -2063,15 +1579,11 @@ var PlatformOrchestrator = class {
|
|
|
2063
1579
|
inspector = $inject(PlatformInspector);
|
|
2064
1580
|
naming = $inject(NamingService);
|
|
2065
1581
|
cloudflareAdapter = $inject(CloudflareAdapter);
|
|
2066
|
-
dockerAdapter = $inject(DockerAdapter);
|
|
2067
1582
|
vercelAdapter = $inject(VercelAdapter);
|
|
2068
1583
|
resolveAdapter(adapterName) {
|
|
2069
1584
|
switch (adapterName) {
|
|
2070
1585
|
case "cloudflare": return this.cloudflareAdapter;
|
|
2071
|
-
case "docker":
|
|
2072
|
-
case "docker-compose": return this.dockerAdapter;
|
|
2073
1586
|
case "vercel": return this.vercelAdapter;
|
|
2074
|
-
case "aks": throw new AlephaError(`Adapter "${adapterName}" is not yet available. Currently supported: cloudflare, docker, vercel`);
|
|
2075
1587
|
default: throw new AlephaError(`Unknown adapter: "${adapterName}"`);
|
|
2076
1588
|
}
|
|
2077
1589
|
}
|
|
@@ -2300,7 +1812,7 @@ var SecretFilterService = class SecretFilterService {
|
|
|
2300
1812
|
//#region ../../src/cli/platform/commands/SecretsCommand.ts
|
|
2301
1813
|
var SecretsCommand = class {
|
|
2302
1814
|
log = $logger();
|
|
2303
|
-
options = $
|
|
1815
|
+
options = $state(platformOptions);
|
|
2304
1816
|
inspector = $inject(PlatformInspector);
|
|
2305
1817
|
naming = $inject(NamingService);
|
|
2306
1818
|
envUtils = $inject(EnvUtils);
|
|
@@ -2468,7 +1980,7 @@ var SecretsCommand = class {
|
|
|
2468
1980
|
//#region ../../src/cli/platform/commands/platform.ts
|
|
2469
1981
|
var PlatformCommand = class {
|
|
2470
1982
|
log = $logger();
|
|
2471
|
-
options = $
|
|
1983
|
+
options = $state(platformOptions);
|
|
2472
1984
|
orchestrator = $inject(PlatformOrchestrator);
|
|
2473
1985
|
inspector = $inject(PlatformInspector);
|
|
2474
1986
|
naming = $inject(NamingService);
|
|
@@ -2542,16 +2054,6 @@ var PlatformCommand = class {
|
|
|
2542
2054
|
});
|
|
2543
2055
|
}
|
|
2544
2056
|
}
|
|
2545
|
-
if (adapterName === "docker" || adapterName === "docker-compose") {
|
|
2546
|
-
if (hasDB && !envVars.DATABASE_URL) resources.push({
|
|
2547
|
-
label: "Postgres",
|
|
2548
|
-
value: "postgres:17-alpine"
|
|
2549
|
-
});
|
|
2550
|
-
if (hasBucket && !envVars.S3_ENDPOINT) resources.push({
|
|
2551
|
-
label: "RustFS",
|
|
2552
|
-
value: "rustfs/rustfs:latest"
|
|
2553
|
-
});
|
|
2554
|
-
}
|
|
2555
2057
|
const excludedKeys = adapterName === "vercel" ? VercelAdapter.EXCLUDED_SECRET_KEYS : CloudflareAdapter.EXCLUDED_SECRET_KEYS;
|
|
2556
2058
|
const secretCount = Object.entries(envVars).filter(([key, value]) => value && !excludedKeys.has(key) && !key.startsWith("VITE_")).length;
|
|
2557
2059
|
if (flags.json) {
|
|
@@ -3078,17 +2580,46 @@ const platformPlanSchema = t.object({
|
|
|
3078
2580
|
});
|
|
3079
2581
|
//#endregion
|
|
3080
2582
|
//#region ../../src/cli/platform/index.ts
|
|
3081
|
-
|
|
3082
|
-
|
|
2583
|
+
/**
|
|
2584
|
+
* CLI plugin for multi-cloud deployment orchestration.
|
|
2585
|
+
*
|
|
2586
|
+
* Manages the full lifecycle of deploying Alepha apps: provision resources,
|
|
2587
|
+
* build, migrate databases, deploy, and sync secrets. Supports Cloudflare
|
|
2588
|
+
* Workers and Vercel.
|
|
2589
|
+
*
|
|
2590
|
+
* Commands:
|
|
2591
|
+
* - `alepha platform plan` — show project topology and resource names
|
|
2592
|
+
* - `alepha platform up` — full deployment pipeline
|
|
2593
|
+
* - `alepha platform down` — teardown an environment
|
|
2594
|
+
* - `alepha platform status` — inspect deployed resources
|
|
2595
|
+
* - `alepha platform build` — build apps locally
|
|
2596
|
+
* - `alepha platform deploy` — deploy to cloud
|
|
2597
|
+
* - `alepha platform migrate` — run database migrations
|
|
2598
|
+
* - `alepha platform secrets` — manage external secret stores
|
|
2599
|
+
*
|
|
2600
|
+
* Configuration in `alepha.config.ts`:
|
|
2601
|
+
*
|
|
2602
|
+
* ```typescript
|
|
2603
|
+
* import { AlephaCliPlatform } from "alepha/cli/platform";
|
|
2604
|
+
*
|
|
2605
|
+
* export default defineConfig({
|
|
2606
|
+
* services: [AlephaCliPlatform],
|
|
2607
|
+
* platform: {
|
|
2608
|
+
* environments: {
|
|
2609
|
+
* production: { adapter: "cloudflare", domain: "myapp.com" },
|
|
2610
|
+
* },
|
|
2611
|
+
* },
|
|
2612
|
+
* });
|
|
2613
|
+
* ```
|
|
2614
|
+
*/
|
|
2615
|
+
const AlephaCliPlatformPlugin = $module({
|
|
2616
|
+
name: "alepha.cli.plugins.platform",
|
|
3083
2617
|
services: [
|
|
3084
2618
|
AlephaCli,
|
|
3085
2619
|
PlatformCommand,
|
|
3086
2620
|
SecretsCommand,
|
|
3087
2621
|
CloudflareAdapter,
|
|
3088
2622
|
CloudflareApi,
|
|
3089
|
-
DockerAdapter,
|
|
3090
|
-
DockerComposeGenerator,
|
|
3091
|
-
DockerSshService,
|
|
3092
2623
|
VercelAdapter,
|
|
3093
2624
|
VercelApi,
|
|
3094
2625
|
VercelCli,
|
|
@@ -3103,6 +2634,6 @@ const AlephaCliPlatform = $module({
|
|
|
3103
2634
|
]
|
|
3104
2635
|
});
|
|
3105
2636
|
//#endregion
|
|
3106
|
-
export {
|
|
2637
|
+
export { AlephaCliPlatformPlugin, CloudflareAdapter, CloudflareApi, GitHubSecretStore, MemorySecretStore, NamingContext, NamingService, PlatformAdapter, PlatformCacheProvider, PlatformCommand, PlatformInspector, PlatformOrchestrator, SecretFilterService, SecretStoreProvider, SecretsCommand, VercelAdapter, VercelApi, VercelCli, WranglerApi, cloudflareAccountSchema, cloudflareApiErrorSchema, cloudflareD1Schema, cloudflareDeploymentListSchema, cloudflareDeploymentSchema, cloudflareDeploymentVersionSchema, cloudflareHyperdriveOriginSchema, cloudflareHyperdriveSchema, cloudflareKVSchema, cloudflareQueueConsumerSchema, cloudflareQueueSchema, cloudflareR2ListSchema, cloudflareR2Schema, cloudflareSecretSchema, cloudflareVersionListSchema, cloudflareVersionSchema, cloudflareWorkerSchema, createD1BodySchema, createEnvVarBodySchema, createHyperdriveBodySchema, createHyperdriveOriginSchema, createKVBodySchema, createProjectBodySchema, createQueueBodySchema, createR2BodySchema, platformOptions, platformPlanAppResourcesSchema, platformPlanAppSchema, platformPlanEnvironmentSchema, platformPlanResourceSchema, platformPlanSchema, platformStatusResourceSchema, platformStatusSchema, platformStatusSecretSchema, platformStatusWorkerSchema, putSecretBodySchema, vercelDeploymentSchema, vercelEnvVarSchema, vercelProjectSchema };
|
|
3107
2638
|
|
|
3108
2639
|
//# sourceMappingURL=index.js.map
|