openship 0.1.1 → 0.1.7
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/dist/index.d.ts +1 -0
- package/dist/index.js +5786 -0
- package/dist/server/index.js +324319 -0
- package/dist/server/migrations/0000_init.sql +666 -0
- package/dist/server/migrations/0001_brief_tomorrow_man.sql +47 -0
- package/dist/server/migrations/0002_funny_dazzler.sql +2 -0
- package/dist/server/migrations/0003_third_killer_shrike.sql +1 -0
- package/dist/server/migrations/0004_session_active_org_not_null.sql +10 -0
- package/dist/server/migrations/0005_warm_amazoness.sql +3 -0
- package/dist/server/migrations/0006_lumpy_joystick.sql +1 -0
- package/dist/server/migrations/0007_outgoing_maginty.sql +2 -0
- package/dist/server/migrations/0008_frozen_cutover.sql +3 -0
- package/dist/server/migrations/0009_credits_billing.sql +142 -0
- package/dist/server/migrations/0010_credit_grant_dedupe.sql +14 -0
- package/dist/server/migrations/0011_remove_credit_ledger.sql +23 -0
- package/dist/server/migrations/0012_smart_deploys_and_git_rollback.sql +81 -0
- package/dist/server/migrations/0013_fix_check_run_rollup_unique.sql +38 -0
- package/dist/server/migrations/0014_default_rollback_git.sql +9 -0
- package/dist/server/migrations/0015_billing_idempotency_grants.sql +41 -0
- package/dist/server/migrations/0016_github_auth_high_findings.sql +30 -0
- package/dist/server/migrations/0017_spooky_rumiko_fujikawa.sql +6 -0
- package/dist/server/migrations/0018_calm_shatterstar.sql +1 -0
- package/dist/server/migrations/0019_rename_workspace_install_to_prepare.sql +1 -0
- package/dist/server/migrations/0020_uneven_the_renegades.sql +13 -0
- package/dist/server/migrations/0021_shiny_firestar.sql +2 -0
- package/dist/server/migrations/0022_version_on_success_backfill.sql +6 -0
- package/dist/server/migrations/0023_productive_gorilla_man.sql +17 -0
- package/dist/server/migrations/0024_sleepy_peter_quill.sql +2 -0
- package/dist/server/migrations/0025_smooth_blue_shield.sql +1 -0
- package/dist/server/migrations/0026_mail_backup_source.sql +11 -0
- package/dist/server/migrations/0027_opposite_anthem.sql +6 -0
- package/dist/server/migrations/0028_stale_rogue.sql +18 -0
- package/dist/server/migrations/0029_bouncy_loners.sql +16 -0
- package/dist/server/migrations/0030_bright_darkstar.sql +6 -0
- package/dist/server/migrations/0031_conscious_catseye.sql +13 -0
- package/dist/server/migrations/0032_wet_mimic.sql +51 -0
- package/dist/server/migrations/0033_eminent_molly_hayes.sql +2 -0
- package/dist/server/migrations/meta/0000_snapshot.json +5110 -0
- package/dist/server/migrations/meta/0001_snapshot.json +5257 -0
- package/dist/server/migrations/meta/0002_snapshot.json +5279 -0
- package/dist/server/migrations/meta/0003_snapshot.json +5286 -0
- package/dist/server/migrations/meta/0004_snapshot.json +5286 -0
- package/dist/server/migrations/meta/0005_snapshot.json +5305 -0
- package/dist/server/migrations/meta/0006_snapshot.json +5311 -0
- package/dist/server/migrations/meta/0007_snapshot.json +5323 -0
- package/dist/server/migrations/meta/0016_snapshot.json +6345 -0
- package/dist/server/migrations/meta/0017_snapshot.json +6383 -0
- package/dist/server/migrations/meta/0018_snapshot.json +6390 -0
- package/dist/server/migrations/meta/0019_snapshot.json +6390 -0
- package/dist/server/migrations/meta/0020_snapshot.json +6497 -0
- package/dist/server/migrations/meta/0021_snapshot.json +6509 -0
- package/dist/server/migrations/meta/0022_snapshot.json +6509 -0
- package/dist/server/migrations/meta/0023_snapshot.json +6629 -0
- package/dist/server/migrations/meta/0024_snapshot.json +6641 -0
- package/dist/server/migrations/meta/0025_snapshot.json +6648 -0
- package/dist/server/migrations/meta/0026_snapshot.json +6750 -0
- package/dist/server/migrations/meta/0027_snapshot.json +6757 -0
- package/dist/server/migrations/meta/0028_snapshot.json +6895 -0
- package/dist/server/migrations/meta/0029_snapshot.json +7028 -0
- package/dist/server/migrations/meta/0030_snapshot.json +7066 -0
- package/dist/server/migrations/meta/0031_snapshot.json +7181 -0
- package/dist/server/migrations/meta/0032_snapshot.json +7570 -0
- package/dist/server/migrations/meta/0033_snapshot.json +7597 -0
- package/dist/server/migrations/meta/_journal.json +244 -0
- package/dist/server/pglite/pglite.data +0 -0
- package/dist/server/pglite/pglite.wasm +0 -0
- package/package.json +31 -33
- package/.env.example +0 -38
- package/.nvmrc +0 -1
- package/.prettierrc +0 -7
- package/CONTRIBUTING.md +0 -90
- package/LICENSE +0 -661
- package/README.md +0 -360
- package/apps/api/.env.example +0 -30
- package/apps/api/Dockerfile +0 -22
- package/apps/api/package.json +0 -41
- package/apps/api/src/app.ts +0 -69
- package/apps/api/src/config/env.ts +0 -113
- package/apps/api/src/config/index.ts +0 -1
- package/apps/api/src/index.ts +0 -8
- package/apps/api/src/lib/auth-mode.ts +0 -42
- package/apps/api/src/lib/auth.ts +0 -105
- package/apps/api/src/lib/cache.ts +0 -128
- package/apps/api/src/lib/cloud-auth-proxy.ts +0 -310
- package/apps/api/src/lib/cloud-client.ts +0 -103
- package/apps/api/src/lib/compose-parser.ts +0 -138
- package/apps/api/src/lib/controller-helpers.ts +0 -90
- package/apps/api/src/lib/email-templates.ts +0 -94
- package/apps/api/src/lib/encryption.ts +0 -102
- package/apps/api/src/lib/local-user.ts +0 -65
- package/apps/api/src/lib/mail.ts +0 -48
- package/apps/api/src/lib/notifications.ts +0 -195
- package/apps/api/src/lib/openship-cloud.ts +0 -101
- package/apps/api/src/lib/resources.ts +0 -96
- package/apps/api/src/lib/screenshots.ts +0 -189
- package/apps/api/src/lib/ssh-manager.ts +0 -369
- package/apps/api/src/lib/ssl-scheduler.ts +0 -109
- package/apps/api/src/lib/stack-detector.ts +0 -708
- package/apps/api/src/lib/system-debug.ts +0 -10
- package/apps/api/src/middleware/auth.ts +0 -60
- package/apps/api/src/middleware/error-handler.ts +0 -41
- package/apps/api/src/middleware/index.ts +0 -5
- package/apps/api/src/middleware/internal-auth.ts +0 -40
- package/apps/api/src/middleware/local-only.ts +0 -20
- package/apps/api/src/middleware/rate-limiter.ts +0 -35
- package/apps/api/src/modules/analytics/analytics.controller.ts +0 -111
- package/apps/api/src/modules/analytics/analytics.routes.ts +0 -29
- package/apps/api/src/modules/analytics/analytics.schema.ts +0 -37
- package/apps/api/src/modules/analytics/analytics.service.ts +0 -264
- package/apps/api/src/modules/auth/auth.routes.ts +0 -237
- package/apps/api/src/modules/billing/billing.controller.ts +0 -60
- package/apps/api/src/modules/billing/billing.routes.ts +0 -34
- package/apps/api/src/modules/billing/billing.schema.ts +0 -9
- package/apps/api/src/modules/billing/billing.service.ts +0 -33
- package/apps/api/src/modules/cloud/cloud.controller.ts +0 -225
- package/apps/api/src/modules/cloud/cloud.routes.ts +0 -40
- package/apps/api/src/modules/deployments/build.service.ts +0 -791
- package/apps/api/src/modules/deployments/deployment-lifecycle.ts +0 -138
- package/apps/api/src/modules/deployments/deployment.controller.ts +0 -343
- package/apps/api/src/modules/deployments/deployment.routes.ts +0 -37
- package/apps/api/src/modules/deployments/deployment.schema.ts +0 -39
- package/apps/api/src/modules/deployments/deployment.service.ts +0 -190
- package/apps/api/src/modules/deployments/preflight.ts +0 -280
- package/apps/api/src/modules/deployments/prepare.service.ts +0 -252
- package/apps/api/src/modules/deployments/session-manager.ts +0 -283
- package/apps/api/src/modules/deployments/ssl.service.ts +0 -73
- package/apps/api/src/modules/domains/domain.controller.ts +0 -73
- package/apps/api/src/modules/domains/domain.routes.ts +0 -24
- package/apps/api/src/modules/domains/domain.schema.ts +0 -35
- package/apps/api/src/modules/domains/domain.service.ts +0 -385
- package/apps/api/src/modules/github/github.auth.ts +0 -397
- package/apps/api/src/modules/github/github.controller.ts +0 -387
- package/apps/api/src/modules/github/github.local-auth.ts +0 -251
- package/apps/api/src/modules/github/github.routes.ts +0 -50
- package/apps/api/src/modules/github/github.schema.ts +0 -52
- package/apps/api/src/modules/github/github.service.ts +0 -592
- package/apps/api/src/modules/github/github.types.ts +0 -158
- package/apps/api/src/modules/github/github.webhook.ts +0 -186
- package/apps/api/src/modules/github/index.ts +0 -16
- package/apps/api/src/modules/health/health.routes.ts +0 -45
- package/apps/api/src/modules/projects/project.controller.ts +0 -498
- package/apps/api/src/modules/projects/project.routes.ts +0 -67
- package/apps/api/src/modules/projects/project.schema.ts +0 -107
- package/apps/api/src/modules/projects/project.service.ts +0 -514
- package/apps/api/src/modules/settings/settings.controller.ts +0 -55
- package/apps/api/src/modules/settings/settings.routes.ts +0 -25
- package/apps/api/src/modules/settings/settings.service.ts +0 -49
- package/apps/api/src/modules/system/filesystem.controller.ts +0 -66
- package/apps/api/src/modules/system/index.ts +0 -1
- package/apps/api/src/modules/system/server-check.controller.ts +0 -475
- package/apps/api/src/modules/system/setup-session.ts +0 -255
- package/apps/api/src/modules/system/setup.controller.ts +0 -128
- package/apps/api/src/modules/system/system.routes.ts +0 -42
- package/apps/api/src/modules/webhooks/webhook.controller.ts +0 -64
- package/apps/api/src/modules/webhooks/webhook.routes.ts +0 -15
- package/apps/api/src/modules/webhooks/webhook.service.ts +0 -52
- package/apps/api/src/modules/webhooks/webhook.types.ts +0 -35
- package/apps/api/tsconfig.json +0 -14
- package/apps/cli/package.json +0 -26
- package/apps/cli/src/commands/deploy.ts +0 -11
- package/apps/cli/src/commands/init.ts +0 -8
- package/apps/cli/src/commands/login.ts +0 -8
- package/apps/cli/src/commands/logs.ts +0 -9
- package/apps/cli/src/index.ts +0 -21
- package/apps/cli/src/lib/api-client.ts +0 -35
- package/apps/cli/tsconfig.json +0 -13
- package/apps/dashboard/Dockerfile +0 -22
- package/apps/dashboard/components.json +0 -20
- package/apps/dashboard/next-env.d.ts +0 -6
- package/apps/dashboard/next.config.mjs +0 -16
- package/apps/dashboard/package.json +0 -40
- package/apps/dashboard/postcss.config.mjs +0 -5
- package/apps/dashboard/public/android-chrome-192x192.png +0 -0
- package/apps/dashboard/public/android-chrome-512x512.png +0 -0
- package/apps/dashboard/public/apple-touch-icon.png +0 -0
- package/apps/dashboard/public/favicon-16x16.png +0 -0
- package/apps/dashboard/public/favicon-32x32.png +0 -0
- package/apps/dashboard/public/favicon.ico +0 -0
- package/apps/dashboard/public/site.webmanifest +0 -19
- package/apps/dashboard/src/app/(auth)/forgot-password/page.tsx +0 -114
- package/apps/dashboard/src/app/(auth)/layout.tsx +0 -21
- package/apps/dashboard/src/app/(auth)/login/page.tsx +0 -220
- package/apps/dashboard/src/app/(auth)/providers.tsx +0 -34
- package/apps/dashboard/src/app/(auth)/register/page.tsx +0 -176
- package/apps/dashboard/src/app/(auth)/reset-password/page.tsx +0 -172
- package/apps/dashboard/src/app/(auth)/verify-email/page.tsx +0 -190
- package/apps/dashboard/src/app/(dashboard)/(deployment)/build/[id]/page.tsx +0 -162
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/BuildSummary.tsx +0 -166
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DnsConfiguration.tsx +0 -119
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DomainSettings.tsx +0 -291
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Header.tsx +0 -71
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Sidebar.tsx +0 -270
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/SkeletonLoader.tsx +0 -87
- package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/page.tsx +0 -169
- package/apps/dashboard/src/app/(dashboard)/(deployment)/layout.tsx +0 -7
- package/apps/dashboard/src/app/(dashboard)/billing/page.tsx +0 -3
- package/apps/dashboard/src/app/(dashboard)/deployments/components/CommitDetailsModal.tsx +0 -240
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentCard.tsx +0 -121
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentHeader.tsx +0 -89
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentMenu.tsx +0 -182
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsContent.tsx +0 -324
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsFilters.tsx +0 -99
- package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsList.tsx +0 -31
- package/apps/dashboard/src/app/(dashboard)/deployments/components/EmptyState.tsx +0 -101
- package/apps/dashboard/src/app/(dashboard)/deployments/components/LoadingSkeleton.tsx +0 -57
- package/apps/dashboard/src/app/(dashboard)/deployments/components/ProjectFilter.tsx +0 -109
- package/apps/dashboard/src/app/(dashboard)/deployments/components/index.ts +0 -9
- package/apps/dashboard/src/app/(dashboard)/deployments/page.tsx +0 -14
- package/apps/dashboard/src/app/(dashboard)/deployments/types.ts +0 -44
- package/apps/dashboard/src/app/(dashboard)/deployments/utils.ts +0 -176
- package/apps/dashboard/src/app/(dashboard)/domains/page.tsx +0 -3
- package/apps/dashboard/src/app/(dashboard)/integrations/page.tsx +0 -321
- package/apps/dashboard/src/app/(dashboard)/layout.tsx +0 -27
- package/apps/dashboard/src/app/(dashboard)/library/components/ConnectPrompt.tsx +0 -187
- package/apps/dashboard/src/app/(dashboard)/library/components/LibrarySidebar.tsx +0 -147
- package/apps/dashboard/src/app/(dashboard)/library/components/LoadingSkeleton.tsx +0 -39
- package/apps/dashboard/src/app/(dashboard)/library/components/LocalProjects.tsx +0 -548
- package/apps/dashboard/src/app/(dashboard)/library/components/RepositoryList.tsx +0 -292
- package/apps/dashboard/src/app/(dashboard)/library/components/TemplateGrid.tsx +0 -36
- package/apps/dashboard/src/app/(dashboard)/library/components/UrlImport.tsx +0 -74
- package/apps/dashboard/src/app/(dashboard)/library/page.tsx +0 -121
- package/apps/dashboard/src/app/(dashboard)/library/types.ts +0 -26
- package/apps/dashboard/src/app/(dashboard)/monitoring/page.tsx +0 -3
- package/apps/dashboard/src/app/(dashboard)/page.tsx +0 -485
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/layout.tsx +0 -22
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/page.tsx +0 -286
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/AdvancedSettings.tsx +0 -235
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/BuildSettings.tsx +0 -174
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeleteConfirmationDialog.tsx +0 -45
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeletionModal.tsx +0 -95
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/Deployments.tsx +0 -11
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DomainSettings.tsx +0 -523
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/EnvironmentSettings.tsx +0 -246
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GeneralSettings.tsx +0 -93
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitInfo.tsx +0 -261
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitSettings.tsx +0 -391
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/LogsSettings.tsx +0 -133
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectNotFound.tsx +0 -95
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectsBottomNavigation.tsx +0 -62
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ResourceSettings.tsx +0 -333
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingSection.tsx +0 -66
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingsNavigation.tsx +0 -27
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SleepModeSettings.tsx +0 -134
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProductionUrl.tsx +0 -25
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectIdentity.tsx +0 -159
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectInfo.tsx +0 -58
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/SkeletonLoader.tsx +0 -170
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/StatsCards.tsx +0 -33
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TopPaths.tsx +0 -56
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TrafficChart.tsx +0 -157
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/index.ts +0 -14
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/LogsActions.tsx +0 -52
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/ServerLogs.tsx +0 -249
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/TerminalLogs.tsx +0 -682
- package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/logs.css +0 -127
- package/apps/dashboard/src/app/(dashboard)/projects/components/DeploymentCard.tsx +0 -73
- package/apps/dashboard/src/app/(dashboard)/projects/components/ProjectCard.tsx +0 -330
- package/apps/dashboard/src/app/(dashboard)/projects/page.tsx +0 -330
- package/apps/dashboard/src/app/(dashboard)/providers.tsx +0 -23
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/components-tab.tsx +0 -329
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/overview-tab.tsx +0 -229
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/terminal-tab.tsx +0 -38
- package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/page.tsx +0 -437
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/checking-state.tsx +0 -15
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/choose-mode.tsx +0 -54
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/component-row.tsx +0 -65
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/error-banner.tsx +0 -13
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/installing-panel.tsx +0 -227
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/results-panel.tsx +0 -90
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/setup-header.tsx +0 -56
- package/apps/dashboard/src/app/(dashboard)/servers/new/_components/types.ts +0 -13
- package/apps/dashboard/src/app/(dashboard)/servers/new/page.tsx +0 -666
- package/apps/dashboard/src/app/(dashboard)/servers/page.tsx +0 -283
- package/apps/dashboard/src/app/(dashboard)/settings/_components/BuildPreferences.tsx +0 -110
- package/apps/dashboard/src/app/(dashboard)/settings/_components/CloudConnection.tsx +0 -147
- package/apps/dashboard/src/app/(dashboard)/settings/_components/InstanceInfo.tsx +0 -54
- package/apps/dashboard/src/app/(dashboard)/settings/_components/ServerConnection.tsx +0 -407
- package/apps/dashboard/src/app/(dashboard)/settings/_components/SettingsSection.tsx +0 -32
- package/apps/dashboard/src/app/(dashboard)/settings/page.tsx +0 -67
- package/apps/dashboard/src/app/auth/callback/close/page.tsx +0 -23
- package/apps/dashboard/src/app/auth/callback/install/page.tsx +0 -40
- package/apps/dashboard/src/app/authorize/page.tsx +0 -137
- package/apps/dashboard/src/app/globals.css +0 -57
- package/apps/dashboard/src/app/layout.tsx +0 -55
- package/apps/dashboard/src/components/auth-shell.tsx +0 -66
- package/apps/dashboard/src/components/deployments/types.ts +0 -44
- package/apps/dashboard/src/components/global-deployments/index.ts +0 -17
- package/apps/dashboard/src/components/i18n-provider.tsx +0 -100
- package/apps/dashboard/src/components/import-project/BuildSettings.tsx +0 -376
- package/apps/dashboard/src/components/import-project/BuildSkeleton.tsx +0 -161
- package/apps/dashboard/src/components/import-project/BuildTerminal.tsx +0 -358
- package/apps/dashboard/src/components/import-project/ComposeServices.tsx +0 -455
- package/apps/dashboard/src/components/import-project/DeploymentProcessing.tsx +0 -510
- package/apps/dashboard/src/components/import-project/DockerSettings.tsx +0 -64
- package/apps/dashboard/src/components/import-project/EnvironmentVariables.tsx +0 -481
- package/apps/dashboard/src/components/import-project/Frameworks.tsx +0 -90
- package/apps/dashboard/src/components/import-project/ProjectSettings.tsx +0 -160
- package/apps/dashboard/src/components/import-project/types.ts +0 -82
- package/apps/dashboard/src/components/integrations/GithubPermissionModal.tsx +0 -173
- package/apps/dashboard/src/components/language-switcher.tsx +0 -36
- package/apps/dashboard/src/components/logo.tsx +0 -13
- package/apps/dashboard/src/components/network-error-handler.tsx +0 -27
- package/apps/dashboard/src/components/oauth-buttons.tsx +0 -81
- package/apps/dashboard/src/components/overview/ActivityChart.tsx +0 -247
- package/apps/dashboard/src/components/overview/ApiRequestsCard.tsx +0 -111
- package/apps/dashboard/src/components/overview/CreditsCard.tsx +0 -137
- package/apps/dashboard/src/components/overview/DeploymentsChart.tsx +0 -195
- package/apps/dashboard/src/components/overview/EmptyState.tsx +0 -126
- package/apps/dashboard/src/components/overview/LoadingSkeleton.tsx +0 -92
- package/apps/dashboard/src/components/overview/OverviewHeader.tsx +0 -74
- package/apps/dashboard/src/components/overview/OverviewHeroChart.tsx +0 -344
- package/apps/dashboard/src/components/overview/ProjectsCard.tsx +0 -134
- package/apps/dashboard/src/components/overview/QuickLinks.tsx +0 -119
- package/apps/dashboard/src/components/overview/SandboxesCard.tsx +0 -150
- package/apps/dashboard/src/components/overview/StatsGrid.tsx +0 -166
- package/apps/dashboard/src/components/overview/TokenUsageChart.tsx +0 -206
- package/apps/dashboard/src/components/overview/UsageStats.tsx +0 -79
- package/apps/dashboard/src/components/overview/index.ts +0 -30
- package/apps/dashboard/src/components/overview/types.ts +0 -116
- package/apps/dashboard/src/components/page-header.tsx +0 -25
- package/apps/dashboard/src/components/project-settings/ServerSideSwitch.jsx +0 -60
- package/apps/dashboard/src/components/shared/AlertBox.tsx +0 -39
- package/apps/dashboard/src/components/shared/CTASection.tsx +0 -45
- package/apps/dashboard/src/components/shared/ErrorState.tsx +0 -176
- package/apps/dashboard/src/components/shared/FeatureCard.tsx +0 -20
- package/apps/dashboard/src/components/shared/MDXComponents.tsx +0 -24
- package/apps/dashboard/src/components/shared/MachineSettingsModal.tsx +0 -286
- package/apps/dashboard/src/components/shared/Modal.tsx +0 -39
- package/apps/dashboard/src/components/shared/OTPInput.tsx +0 -122
- package/apps/dashboard/src/components/shared/PageHero.tsx +0 -21
- package/apps/dashboard/src/components/shared/PlatformFeatureCard.tsx +0 -27
- package/apps/dashboard/src/components/shared/StatCard.tsx +0 -14
- package/apps/dashboard/src/components/shared/ValueCard.tsx +0 -20
- package/apps/dashboard/src/components/shared/index.ts +0 -8
- package/apps/dashboard/src/components/sidebar.tsx +0 -282
- package/apps/dashboard/src/components/theme-provider.tsx +0 -96
- package/apps/dashboard/src/components/toast.tsx +0 -106
- package/apps/dashboard/src/components/ui/CustomCursor.tsx +0 -107
- package/apps/dashboard/src/components/ui/CustomSelect.tsx +0 -126
- package/apps/dashboard/src/components/ui/DropdownMenu.tsx +0 -174
- package/apps/dashboard/src/components/ui/FileIcon.jsx +0 -59
- package/apps/dashboard/src/components/ui/IconPickerModal.tsx +0 -273
- package/apps/dashboard/src/components/ui/InfoBanner.jsx +0 -39
- package/apps/dashboard/src/components/ui/Logo.tsx +0 -14
- package/apps/dashboard/src/components/ui/Modal.tsx +0 -117
- package/apps/dashboard/src/components/ui/PageContainer.tsx +0 -12
- package/apps/dashboard/src/components/ui/SectionContainer.jsx +0 -7
- package/apps/dashboard/src/components/ui/SlidingToggle.tsx +0 -128
- package/apps/dashboard/src/components/ui/Toast.tsx +0 -29
- package/apps/dashboard/src/components/ui/button.tsx +0 -58
- package/apps/dashboard/src/components/ui/card.tsx +0 -60
- package/apps/dashboard/src/components/ui/input.tsx +0 -20
- package/apps/dashboard/src/components/ui/label.tsx +0 -19
- package/apps/dashboard/src/components/ui/select.tsx +0 -10
- package/apps/dashboard/src/components/ui/textarea.tsx +0 -9
- package/apps/dashboard/src/constants/lang-colors.ts +0 -25
- package/apps/dashboard/src/constants/mock.ts +0 -38
- package/apps/dashboard/src/context/AuthContext.tsx +0 -91
- package/apps/dashboard/src/context/CloudContext.tsx +0 -275
- package/apps/dashboard/src/context/DeploymentContext.tsx +0 -71
- package/apps/dashboard/src/context/GitHubContext.tsx +0 -288
- package/apps/dashboard/src/context/ModalContext.tsx +0 -300
- package/apps/dashboard/src/context/NetworkContext.tsx +0 -32
- package/apps/dashboard/src/context/ProjectSettingsContext.tsx +0 -727
- package/apps/dashboard/src/context/ToastContext.tsx +0 -129
- package/apps/dashboard/src/context/deployment/index.ts +0 -3
- package/apps/dashboard/src/context/deployment/types.ts +0 -183
- package/apps/dashboard/src/context/deployment/useDeploymentBuild.ts +0 -547
- package/apps/dashboard/src/context/deployment/useDeploymentConfig.ts +0 -176
- package/apps/dashboard/src/hooks/useBuildConnection.ts +0 -334
- package/apps/dashboard/src/hooks/useMonitorStream.ts +0 -146
- package/apps/dashboard/src/hooks/useProjectData.ts +0 -110
- package/apps/dashboard/src/hooks/useSSEConnection.ts +0 -465
- package/apps/dashboard/src/hooks/useSSEStream.ts +0 -309
- package/apps/dashboard/src/hooks/useSessions.ts +0 -104
- package/apps/dashboard/src/hooks/useSetupStream.ts +0 -223
- package/apps/dashboard/src/i18n/dictionaries/ar.json +0 -218
- package/apps/dashboard/src/i18n/dictionaries/en.json +0 -218
- package/apps/dashboard/src/i18n/index.ts +0 -16
- package/apps/dashboard/src/lib/api/ai.ts +0 -22
- package/apps/dashboard/src/lib/api/auth.ts +0 -13
- package/apps/dashboard/src/lib/api/client.ts +0 -199
- package/apps/dashboard/src/lib/api/cloud.ts +0 -15
- package/apps/dashboard/src/lib/api/deploy.ts +0 -58
- package/apps/dashboard/src/lib/api/domains.ts +0 -13
- package/apps/dashboard/src/lib/api/endpoints.ts +0 -129
- package/apps/dashboard/src/lib/api/github.ts +0 -31
- package/apps/dashboard/src/lib/api/icons.ts +0 -12
- package/apps/dashboard/src/lib/api/index.ts +0 -41
- package/apps/dashboard/src/lib/api/projects.ts +0 -153
- package/apps/dashboard/src/lib/api/sandbox.ts +0 -14
- package/apps/dashboard/src/lib/api/settings.ts +0 -21
- package/apps/dashboard/src/lib/api/system.ts +0 -159
- package/apps/dashboard/src/lib/auth-client.ts +0 -54
- package/apps/dashboard/src/lib/country.ts +0 -25
- package/apps/dashboard/src/lib/server/api.ts +0 -140
- package/apps/dashboard/src/lib/server/session.ts +0 -103
- package/apps/dashboard/src/lib/sseClient.ts +0 -241
- package/apps/dashboard/src/lib/sseMessageProcessors.ts +0 -323
- package/apps/dashboard/src/lib/utils.ts +0 -6
- package/apps/dashboard/src/proxy.ts +0 -46
- package/apps/dashboard/src/styles/Toast.module.css +0 -92
- package/apps/dashboard/src/styles/fonts.css +0 -93
- package/apps/dashboard/src/styles/theme.css +0 -336
- package/apps/dashboard/src/types/research.ts +0 -42
- package/apps/dashboard/src/utils/SSEParser.js +0 -150
- package/apps/dashboard/src/utils/authWindow.ts +0 -143
- package/apps/dashboard/src/utils/codeTheme.ts +0 -127
- package/apps/dashboard/src/utils/colors.json +0 -2810
- package/apps/dashboard/src/utils/date.ts +0 -121
- package/apps/dashboard/src/utils/deployment.ts +0 -128
- package/apps/dashboard/src/utils/deploymentPhaseDetector.ts +0 -232
- package/apps/dashboard/src/utils/extToLang.js +0 -103
- package/apps/dashboard/src/utils/github.ts +0 -62
- package/apps/dashboard/src/utils/icons.js +0 -46
- package/apps/dashboard/src/utils/repoSlug.ts +0 -110
- package/apps/dashboard/src/utils/research-api.ts +0 -163
- package/apps/dashboard/src/utils/suggestions.ts +0 -84
- package/apps/dashboard/src/utils/theme.js +0 -1
- package/apps/dashboard/src/utils/ui-helpers.tsx +0 -30
- package/apps/dashboard/src/utils/upload.js +0 -12
- package/apps/dashboard/tsconfig.json +0 -33
- package/apps/desktop/forge.config.json +0 -36
- package/apps/desktop/package.json +0 -26
- package/apps/desktop/scripts/dev.mjs +0 -58
- package/apps/desktop/src/main/index.ts +0 -675
- package/apps/desktop/src/main/types/desktop.d.ts +0 -33
- package/apps/desktop/src/preload/index.ts +0 -88
- package/apps/desktop/src/renderer/index.html +0 -462
- package/apps/desktop/src/renderer/onboarding.js +0 -511
- package/apps/desktop/src/renderer/styles.css +0 -1139
- package/apps/desktop/tsconfig.json +0 -17
- package/apps/web/.source/browser.ts +0 -13
- package/apps/web/.source/dynamic.ts +0 -8
- package/apps/web/.source/server.ts +0 -22
- package/apps/web/.source/source.config.mjs +0 -20
- package/apps/web/Dockerfile +0 -22
- package/apps/web/content/blog/how-ai-builds-work.mdx +0 -55
- package/apps/web/content/blog/introducing-openship.mdx +0 -46
- package/apps/web/content/blog/self-hosting-cost-breakdown.mdx +0 -59
- package/apps/web/content/docs/_meta.json +0 -14
- package/apps/web/content/docs/api.mdx +0 -98
- package/apps/web/content/docs/cli.mdx +0 -80
- package/apps/web/content/docs/first-deployment.mdx +0 -56
- package/apps/web/content/docs/index.mdx +0 -27
- package/apps/web/content/docs/installation.mdx +0 -65
- package/apps/web/content/docs/quickstart.mdx +0 -45
- package/apps/web/next-env.d.ts +0 -6
- package/apps/web/next.config.mjs +0 -20
- package/apps/web/package.json +0 -33
- package/apps/web/postcss.config.mjs +0 -5
- package/apps/web/public/android-chrome-192x192.png +0 -0
- package/apps/web/public/android-chrome-512x512.png +0 -0
- package/apps/web/public/apple-touch-icon.png +0 -0
- package/apps/web/public/favicon-16x16.png +0 -0
- package/apps/web/public/favicon-32x32.png +0 -0
- package/apps/web/public/favicon.ico +0 -0
- package/apps/web/public/site.webmanifest +0 -1
- package/apps/web/source.config.ts +0 -17
- package/apps/web/src/app/(marketing)/layout.tsx +0 -9
- package/apps/web/src/app/(marketing)/page.tsx +0 -2
- package/apps/web/src/app/(marketing)/pricing/page.tsx +0 -10
- package/apps/web/src/app/blog/[...slug]/page.tsx +0 -247
- package/apps/web/src/app/blog/blog.css +0 -575
- package/apps/web/src/app/blog/layout.tsx +0 -50
- package/apps/web/src/app/blog/page.tsx +0 -235
- package/apps/web/src/app/docs/[[...slug]]/page.tsx +0 -67
- package/apps/web/src/app/docs/layout.tsx +0 -62
- package/apps/web/src/app/docs/toc-theme.css +0 -71
- package/apps/web/src/app/download/page.tsx +0 -396
- package/apps/web/src/app/globals.css +0 -20
- package/apps/web/src/app/layout.tsx +0 -70
- package/apps/web/src/app/page.tsx +0 -51
- package/apps/web/src/app/robots.ts +0 -15
- package/apps/web/src/app/sitemap.ts +0 -35
- package/apps/web/src/components/blog/share-sidebar.tsx +0 -81
- package/apps/web/src/components/blog/writer-sidebar.tsx +0 -81
- package/apps/web/src/components/landing/ai-native.tsx +0 -169
- package/apps/web/src/components/landing/backups.tsx +0 -139
- package/apps/web/src/components/landing/cdn.tsx +0 -109
- package/apps/web/src/components/landing/coming-soon.tsx +0 -180
- package/apps/web/src/components/landing/dark-section.tsx +0 -166
- package/apps/web/src/components/landing/dashboard.tsx +0 -407
- package/apps/web/src/components/landing/developer-experience.tsx +0 -224
- package/apps/web/src/components/landing/dns-domains.tsx +0 -146
- package/apps/web/src/components/landing/download-button.tsx +0 -151
- package/apps/web/src/components/landing/features/ai-visual.tsx +0 -48
- package/apps/web/src/components/landing/features/cloud-visual.tsx +0 -44
- package/apps/web/src/components/landing/features/git-visual.tsx +0 -61
- package/apps/web/src/components/landing/features/index.tsx +0 -642
- package/apps/web/src/components/landing/features/infra-visual.tsx +0 -69
- package/apps/web/src/components/landing/features/rollback-visual.tsx +0 -42
- package/apps/web/src/components/landing/features/ssl-visual.tsx +0 -41
- package/apps/web/src/components/landing/features/stacks-visual.tsx +0 -54
- package/apps/web/src/components/landing/final-cta.tsx +0 -116
- package/apps/web/src/components/landing/footer.tsx +0 -145
- package/apps/web/src/components/landing/hero.tsx +0 -110
- package/apps/web/src/components/landing/how-it-works.tsx +0 -210
- package/apps/web/src/components/landing/index.ts +0 -21
- package/apps/web/src/components/landing/mail-server.tsx +0 -122
- package/apps/web/src/components/landing/navbar.tsx +0 -199
- package/apps/web/src/components/landing/no-lockin.tsx +0 -185
- package/apps/web/src/components/landing/open-source-cta.tsx +0 -151
- package/apps/web/src/components/landing/portability.tsx +0 -190
- package/apps/web/src/components/landing/pricing.tsx +0 -263
- package/apps/web/src/components/landing/scaling.tsx +0 -209
- package/apps/web/src/components/landing/why-openship.tsx +0 -291
- package/apps/web/src/hooks/use-gsap-scroll.ts +0 -158
- package/apps/web/src/hooks/use-platform.ts +0 -86
- package/apps/web/src/lib/source.ts +0 -12
- package/apps/web/src/styles/fonts.css +0 -84
- package/apps/web/src/styles/landing.css +0 -951
- package/apps/web/src/styles/theme.css +0 -227
- package/apps/web/tsconfig.json +0 -16
- package/bun.lock +0 -3260
- package/docker-compose.yml +0 -90
- package/docs/screenshots/.gitkeep +0 -0
- package/docs/screenshots/screen.png +0 -0
- package/openship.code-workspace +0 -7
- package/packages/adapters/docs/ARCHITECTURE.md +0 -160
- package/packages/adapters/docs/BUILD-PIPELINE.md +0 -171
- package/packages/adapters/docs/CLOUD.md +0 -239
- package/packages/adapters/docs/EXECUTOR.md +0 -174
- package/packages/adapters/docs/LOG-STREAMING.md +0 -175
- package/packages/adapters/docs/SYSTEM.md +0 -191
- package/packages/adapters/package.json +0 -32
- package/packages/adapters/src/index.ts +0 -144
- package/packages/adapters/src/infra/cloud.ts +0 -42
- package/packages/adapters/src/infra/index.ts +0 -9
- package/packages/adapters/src/infra/noop.ts +0 -27
- package/packages/adapters/src/infra/traefik.ts +0 -297
- package/packages/adapters/src/infra/types.ts +0 -36
- package/packages/adapters/src/platform.ts +0 -255
- package/packages/adapters/src/runtime/bare.ts +0 -567
- package/packages/adapters/src/runtime/build-pipeline.ts +0 -237
- package/packages/adapters/src/runtime/cloud.ts +0 -791
- package/packages/adapters/src/runtime/deploy-pipeline.ts +0 -146
- package/packages/adapters/src/runtime/docker.ts +0 -443
- package/packages/adapters/src/runtime/index.ts +0 -69
- package/packages/adapters/src/runtime/local-build.ts +0 -112
- package/packages/adapters/src/runtime/transfer.ts +0 -82
- package/packages/adapters/src/runtime/types.ts +0 -138
- package/packages/adapters/src/system/catalog.ts +0 -188
- package/packages/adapters/src/system/checks.ts +0 -228
- package/packages/adapters/src/system/components.ts +0 -45
- package/packages/adapters/src/system/debug.ts +0 -18
- package/packages/adapters/src/system/environment.ts +0 -168
- package/packages/adapters/src/system/errors.ts +0 -34
- package/packages/adapters/src/system/executor.ts +0 -600
- package/packages/adapters/src/system/index.ts +0 -58
- package/packages/adapters/src/system/installer.ts +0 -310
- package/packages/adapters/src/system/setup.ts +0 -442
- package/packages/adapters/src/system/state.ts +0 -96
- package/packages/adapters/src/system/types.ts +0 -116
- package/packages/adapters/src/toolchain/catalog.ts +0 -439
- package/packages/adapters/src/toolchain/checks.ts +0 -181
- package/packages/adapters/src/toolchain/index.ts +0 -38
- package/packages/adapters/src/toolchain/installer.ts +0 -189
- package/packages/adapters/src/toolchain/types.ts +0 -84
- package/packages/adapters/src/types.ts +0 -277
- package/packages/adapters/tsconfig.json +0 -11
- package/packages/core/package.json +0 -27
- package/packages/core/src/constants.ts +0 -71
- package/packages/core/src/errors.ts +0 -49
- package/packages/core/src/index.ts +0 -6
- package/packages/core/src/stacks.ts +0 -778
- package/packages/core/src/system.ts +0 -111
- package/packages/core/src/types.ts +0 -68
- package/packages/core/src/utils.ts +0 -43
- package/packages/core/tsconfig.json +0 -11
- package/packages/db/drizzle/0000_init.sql +0 -231
- package/packages/db/drizzle/0001_add_server_name.sql +0 -1
- package/packages/db/drizzle/meta/_journal.json +0 -20
- package/packages/db/drizzle.config.ts +0 -10
- package/packages/db/package.json +0 -44
- package/packages/db/src/client.ts +0 -119
- package/packages/db/src/index.ts +0 -60
- package/packages/db/src/repos/account.repo.ts +0 -92
- package/packages/db/src/repos/deployment.repo.ts +0 -168
- package/packages/db/src/repos/domain.repo.ts +0 -102
- package/packages/db/src/repos/git-installation.repo.ts +0 -95
- package/packages/db/src/repos/index.ts +0 -43
- package/packages/db/src/repos/instance-settings.repo.ts +0 -43
- package/packages/db/src/repos/project.repo.ts +0 -159
- package/packages/db/src/repos/session.repo.ts +0 -82
- package/packages/db/src/repos/settings.repo.ts +0 -51
- package/packages/db/src/repos/user.repo.ts +0 -94
- package/packages/db/src/schema/auth.ts +0 -56
- package/packages/db/src/schema/deployment.ts +0 -87
- package/packages/db/src/schema/domain.ts +0 -46
- package/packages/db/src/schema/github.ts +0 -24
- package/packages/db/src/schema/index.ts +0 -6
- package/packages/db/src/schema/project.ts +0 -117
- package/packages/db/src/schema/settings.ts +0 -103
- package/packages/db/tsconfig.json +0 -11
- package/packages/ui/package.json +0 -38
- package/packages/ui/src/components/badge.tsx +0 -29
- package/packages/ui/src/components/button.tsx +0 -44
- package/packages/ui/src/components/card.tsx +0 -26
- package/packages/ui/src/components/status-dot.tsx +0 -25
- package/packages/ui/src/globals.css +0 -18
- package/packages/ui/src/index.tsx +0 -8
- package/packages/ui/src/lib/cn.ts +0 -7
- package/packages/ui/tsconfig.json +0 -14
- package/pnpm-workspace.yaml +0 -3
- package/tsconfig.base.json +0 -18
- package/turbo.json +0 -36
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* System-wide limits, defaults, and operational constants.
|
|
3
|
-
*
|
|
4
|
-
* Every tunable value that governs system behaviour lives here.
|
|
5
|
-
* Adapter-specific resource configs (CPU, memory, tiers) stay in @repo/adapters
|
|
6
|
-
* because they're infrastructure-level. Everything else belongs here.
|
|
7
|
-
*
|
|
8
|
-
* ────────────────────────────────────────────────────────────────────────────
|
|
9
|
-
* Import from anywhere:
|
|
10
|
-
* import { SYSTEM } from "@repo/core";
|
|
11
|
-
* if (count >= SYSTEM.PROJECTS.MAX_PER_USER) throw ...
|
|
12
|
-
* ────────────────────────────────────────────────────────────────────────────
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
export const SYSTEM = {
|
|
16
|
-
// ── Projects ─────────────────────────────────────────────────────────
|
|
17
|
-
PROJECTS: {
|
|
18
|
-
/** Maximum projects a single user can own */
|
|
19
|
-
MAX_PER_USER: 100,
|
|
20
|
-
/** Maximum active (non-draft, non-deleted) projects per user */
|
|
21
|
-
MAX_ACTIVE_PER_USER: 50,
|
|
22
|
-
/** Default port for the app container */
|
|
23
|
-
DEFAULT_PORT: 3000,
|
|
24
|
-
/** Default git branch when none is specified */
|
|
25
|
-
DEFAULT_BRANCH: "main",
|
|
26
|
-
/** Default production mode */
|
|
27
|
-
DEFAULT_PRODUCTION_MODE: "host" as const,
|
|
28
|
-
/** Default framework when undetected */
|
|
29
|
-
DEFAULT_FRAMEWORK: "unknown" as const,
|
|
30
|
-
/** Default package manager */
|
|
31
|
-
DEFAULT_PACKAGE_MANAGER: "npm" as const,
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
// ── Deployments / Builds ─────────────────────────────────────────────
|
|
35
|
-
DEPLOYMENTS: {
|
|
36
|
-
/** Max concurrent builds for the same project (prevents duplicate builds) */
|
|
37
|
-
MAX_CONCURRENT_PER_PROJECT: 1,
|
|
38
|
-
/** Max pending/queued sessions before rejecting new deployments */
|
|
39
|
-
MAX_PENDING_SESSIONS: 5,
|
|
40
|
-
/** Build session timeout in minutes (auto-fail after this) */
|
|
41
|
-
BUILD_TIMEOUT_MINUTES: 30,
|
|
42
|
-
/** Maximum length of the error message stored in DB */
|
|
43
|
-
MAX_ERROR_MESSAGE_LENGTH: 512,
|
|
44
|
-
/** Default restart policy for production containers */
|
|
45
|
-
DEFAULT_RESTART_POLICY: "always" as const,
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
// ── SSE / Build Streaming ────────────────────────────────────────────
|
|
49
|
-
SSE: {
|
|
50
|
-
/** Maximum log entries kept per build session */
|
|
51
|
-
MAX_LOGS_PER_SESSION: 2000,
|
|
52
|
-
/** Maximum concurrent SSE subscribers per session */
|
|
53
|
-
MAX_SUBSCRIBERS_PER_SESSION: 5,
|
|
54
|
-
/** How long a finished session stays in memory (seconds) */
|
|
55
|
-
SESSION_TTL_SECONDS: 4 * 60 * 60, // 4 hours
|
|
56
|
-
/** Keep-alive heartbeat interval (ms) — prevents proxy/CDN drops */
|
|
57
|
-
HEARTBEAT_INTERVAL_MS: 25_000,
|
|
58
|
-
/** Maximum active sessions in the cache */
|
|
59
|
-
MAX_SESSIONS: 500,
|
|
60
|
-
/** Background sweep interval for stale sessions (ms) */
|
|
61
|
-
SWEEP_INTERVAL_MS: 5 * 60 * 1000,
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
// ── Domains / SSL ────────────────────────────────────────────────────
|
|
65
|
-
DOMAINS: {
|
|
66
|
-
/** Free domain for cloud deployments (slug.CLOUD_DOMAIN) */
|
|
67
|
-
CLOUD_DOMAIN: "opsh.io",
|
|
68
|
-
/** Maximum custom domains per project */
|
|
69
|
-
MAX_PER_PROJECT: 10,
|
|
70
|
-
/** DNS TXT record prefix for domain verification */
|
|
71
|
-
VERIFICATION_PREFIX: "_openship-challenge",
|
|
72
|
-
/** SSL renewal scheduler interval (ms) */
|
|
73
|
-
SSL_RENEW_INTERVAL_MS: 6 * 60 * 60 * 1000, // 6 hours
|
|
74
|
-
/** How many days before expiry to trigger renewal */
|
|
75
|
-
SSL_RENEW_BEFORE_DAYS: 14,
|
|
76
|
-
/** Maximum domains to renew per scheduler run */
|
|
77
|
-
SSL_RENEW_BATCH_SIZE: 50,
|
|
78
|
-
},
|
|
79
|
-
|
|
80
|
-
// ── Environment Variables ────────────────────────────────────────────
|
|
81
|
-
ENV_VARS: {
|
|
82
|
-
/** Maximum env vars per project per environment */
|
|
83
|
-
MAX_PER_PROJECT: 100,
|
|
84
|
-
/** Maximum key length */
|
|
85
|
-
MAX_KEY_LENGTH: 256,
|
|
86
|
-
/** Maximum value length */
|
|
87
|
-
MAX_VALUE_LENGTH: 10_000,
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
// ── Validation ───────────────────────────────────────────────────────
|
|
91
|
-
VALIDATION: {
|
|
92
|
-
/** Maximum length for string fields (names, commands, etc.) */
|
|
93
|
-
MAX_STRING_LENGTH: 500,
|
|
94
|
-
/** Maximum project name length */
|
|
95
|
-
MAX_PROJECT_NAME_LENGTH: 100,
|
|
96
|
-
/** Maximum hostname length (RFC 1035) */
|
|
97
|
-
MAX_HOSTNAME_LENGTH: 253,
|
|
98
|
-
/** Port range */
|
|
99
|
-
MIN_PORT: 1,
|
|
100
|
-
MAX_PORT: 65535,
|
|
101
|
-
/** Resource limits */
|
|
102
|
-
MIN_CPU_CORES: 0.25,
|
|
103
|
-
MAX_CPU_CORES: 4,
|
|
104
|
-
MIN_MEMORY_MB: 128,
|
|
105
|
-
MAX_MEMORY_MB: 8192,
|
|
106
|
-
/** Pagination */
|
|
107
|
-
DEFAULT_PAGE: 1,
|
|
108
|
-
DEFAULT_PER_PAGE: 20,
|
|
109
|
-
MAX_PER_PAGE: 100,
|
|
110
|
-
},
|
|
111
|
-
} as const;
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared TypeScript types used across apps and packages.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/* ---------- Deployment ---------- */
|
|
6
|
-
|
|
7
|
-
export type DeploymentStatus =
|
|
8
|
-
| "queued"
|
|
9
|
-
| "building"
|
|
10
|
-
| "deploying"
|
|
11
|
-
| "ready"
|
|
12
|
-
| "failed"
|
|
13
|
-
| "cancelled";
|
|
14
|
-
|
|
15
|
-
export type Environment = "production" | "preview" | "development";
|
|
16
|
-
|
|
17
|
-
import type { StackId, Language } from "./stacks";
|
|
18
|
-
|
|
19
|
-
/** Framework / stack identifier — derived from STACKS registry */
|
|
20
|
-
export type Framework = StackId;
|
|
21
|
-
|
|
22
|
-
/** Programming language — derived from LANGUAGES registry */
|
|
23
|
-
export type LanguageId = Language;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Package manager identifier.
|
|
27
|
-
* JS has npm/yarn/pnpm/bun, Go has go, Rust has cargo, Python has pip/poetry/uv, etc.
|
|
28
|
-
* Kept as a string (not union) because new package managers can be added to LANGUAGES.
|
|
29
|
-
*/
|
|
30
|
-
export type PackageManager = string;
|
|
31
|
-
|
|
32
|
-
export type ProductionMode = "host" | "static" | "standalone";
|
|
33
|
-
|
|
34
|
-
export type AdapterType = "docker" | "oblien";
|
|
35
|
-
|
|
36
|
-
export type SleepMode = "auto_sleep" | "always_on";
|
|
37
|
-
|
|
38
|
-
export type DomainStatus = "pending" | "active" | "failed" | "removing";
|
|
39
|
-
|
|
40
|
-
export type SslStatus = "none" | "provisioning" | "active" | "expired" | "error";
|
|
41
|
-
|
|
42
|
-
/* ---------- Billing ---------- */
|
|
43
|
-
|
|
44
|
-
export type PlanId = "free" | "pro" | "team";
|
|
45
|
-
|
|
46
|
-
export type SubscriptionStatus = "active" | "canceled" | "past_due";
|
|
47
|
-
|
|
48
|
-
export type UsageMetric = "build_minutes" | "bandwidth_gb" | "deployments";
|
|
49
|
-
|
|
50
|
-
/* ---------- Auth ---------- */
|
|
51
|
-
|
|
52
|
-
export type UserRole = "user" | "admin";
|
|
53
|
-
|
|
54
|
-
export type TeamRole = "owner" | "admin" | "member";
|
|
55
|
-
|
|
56
|
-
/* ---------- API Responses ---------- */
|
|
57
|
-
|
|
58
|
-
export interface ApiResponse<T = unknown> {
|
|
59
|
-
data?: T;
|
|
60
|
-
error?: string;
|
|
61
|
-
message?: string;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export interface PaginatedResponse<T> extends ApiResponse<T[]> {
|
|
65
|
-
total: number;
|
|
66
|
-
page: number;
|
|
67
|
-
perPage: number;
|
|
68
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared utility functions.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { randomBytes } from "node:crypto";
|
|
6
|
-
|
|
7
|
-
/** Generate a URL-safe slug from a string */
|
|
8
|
-
export function slugify(text: string): string {
|
|
9
|
-
return text
|
|
10
|
-
.toLowerCase()
|
|
11
|
-
.replace(/[^\w\s-]/g, "")
|
|
12
|
-
.replace(/[\s_]+/g, "-")
|
|
13
|
-
.replace(/^-+|-+$/g, "")
|
|
14
|
-
.slice(0, 100);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** Generate a prefixed unique ID (e.g. "proj_abc123...") */
|
|
18
|
-
export function generateId(prefix?: string): string {
|
|
19
|
-
const id = randomBytes(12).toString("base64url");
|
|
20
|
-
return prefix ? `${prefix}_${id}` : id;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Format bytes to human-readable string */
|
|
24
|
-
export function formatBytes(bytes: number, decimals = 2): string {
|
|
25
|
-
if (bytes === 0) return "0 B";
|
|
26
|
-
const k = 1024;
|
|
27
|
-
const sizes = ["B", "KB", "MB", "GB", "TB"];
|
|
28
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
29
|
-
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(decimals))} ${sizes[i]}`;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** Format duration in seconds to human-readable string */
|
|
33
|
-
export function formatDuration(seconds: number): string {
|
|
34
|
-
if (seconds < 60) return `${seconds}s`;
|
|
35
|
-
const m = Math.floor(seconds / 60);
|
|
36
|
-
const s = seconds % 60;
|
|
37
|
-
return s > 0 ? `${m}m ${s}s` : `${m}m`;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** Sleep for a given number of milliseconds */
|
|
41
|
-
export function sleep(ms: number): Promise<void> {
|
|
42
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
43
|
-
}
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
-- Full schema: squashed from TypeScript source of truth (packages/db/src/schema/*)
|
|
2
|
-
|
|
3
|
-
-- ── Auth (Better Auth core) ─────────────────────────────────────────────────
|
|
4
|
-
|
|
5
|
-
CREATE TABLE "user" (
|
|
6
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
7
|
-
"name" text NOT NULL,
|
|
8
|
-
"email" text NOT NULL,
|
|
9
|
-
"email_verified" boolean DEFAULT false NOT NULL,
|
|
10
|
-
"image" text,
|
|
11
|
-
"role" text DEFAULT 'user' NOT NULL,
|
|
12
|
-
"auto_provisioned" boolean DEFAULT false NOT NULL,
|
|
13
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
14
|
-
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
15
|
-
CONSTRAINT "user_email_unique" UNIQUE("email")
|
|
16
|
-
);
|
|
17
|
-
--> statement-breakpoint
|
|
18
|
-
CREATE TABLE "session" (
|
|
19
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
20
|
-
"expires_at" timestamp NOT NULL,
|
|
21
|
-
"token" text NOT NULL,
|
|
22
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
23
|
-
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
24
|
-
"ip_address" text,
|
|
25
|
-
"user_agent" text,
|
|
26
|
-
"user_id" text NOT NULL,
|
|
27
|
-
CONSTRAINT "session_token_unique" UNIQUE("token")
|
|
28
|
-
);
|
|
29
|
-
--> statement-breakpoint
|
|
30
|
-
CREATE TABLE "account" (
|
|
31
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
32
|
-
"account_id" text NOT NULL,
|
|
33
|
-
"provider_id" text NOT NULL,
|
|
34
|
-
"user_id" text NOT NULL,
|
|
35
|
-
"access_token" text,
|
|
36
|
-
"refresh_token" text,
|
|
37
|
-
"id_token" text,
|
|
38
|
-
"access_token_expires_at" timestamp,
|
|
39
|
-
"refresh_token_expires_at" timestamp,
|
|
40
|
-
"scope" text,
|
|
41
|
-
"password" text,
|
|
42
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
43
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
44
|
-
);
|
|
45
|
-
--> statement-breakpoint
|
|
46
|
-
CREATE TABLE "verification" (
|
|
47
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
48
|
-
"identifier" text NOT NULL,
|
|
49
|
-
"value" text NOT NULL,
|
|
50
|
-
"expires_at" timestamp NOT NULL,
|
|
51
|
-
"created_at" timestamp DEFAULT now(),
|
|
52
|
-
"updated_at" timestamp DEFAULT now()
|
|
53
|
-
);
|
|
54
|
-
--> statement-breakpoint
|
|
55
|
-
|
|
56
|
-
-- ── Settings ────────────────────────────────────────────────────────────────
|
|
57
|
-
|
|
58
|
-
CREATE TABLE "instance_settings" (
|
|
59
|
-
"id" text PRIMARY KEY DEFAULT 'default' NOT NULL,
|
|
60
|
-
"ssh_host" text,
|
|
61
|
-
"ssh_port" integer DEFAULT 22,
|
|
62
|
-
"ssh_user" text DEFAULT 'root',
|
|
63
|
-
"ssh_auth_method" text,
|
|
64
|
-
"ssh_password" text,
|
|
65
|
-
"ssh_key_path" text,
|
|
66
|
-
"ssh_key_passphrase" text,
|
|
67
|
-
"ssh_jump_host" text,
|
|
68
|
-
"ssh_args" text,
|
|
69
|
-
"tunnel_provider" text,
|
|
70
|
-
"tunnel_token" text,
|
|
71
|
-
"auth_mode" text DEFAULT 'none' NOT NULL,
|
|
72
|
-
"default_build_mode" text DEFAULT 'auto' NOT NULL,
|
|
73
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
74
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
75
|
-
);
|
|
76
|
-
--> statement-breakpoint
|
|
77
|
-
CREATE TABLE "user_settings" (
|
|
78
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
79
|
-
"user_id" text NOT NULL,
|
|
80
|
-
"build_mode" text DEFAULT 'auto' NOT NULL,
|
|
81
|
-
"cloud_session_token" text,
|
|
82
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
83
|
-
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
84
|
-
CONSTRAINT "user_settings_user_id_unique" UNIQUE("user_id")
|
|
85
|
-
);
|
|
86
|
-
--> statement-breakpoint
|
|
87
|
-
|
|
88
|
-
-- ── Projects ────────────────────────────────────────────────────────────────
|
|
89
|
-
|
|
90
|
-
CREATE TABLE "project" (
|
|
91
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
92
|
-
"user_id" text NOT NULL,
|
|
93
|
-
"name" text NOT NULL,
|
|
94
|
-
"slug" text NOT NULL,
|
|
95
|
-
"local_path" text,
|
|
96
|
-
"git_provider" text DEFAULT 'github',
|
|
97
|
-
"git_owner" text,
|
|
98
|
-
"git_repo" text,
|
|
99
|
-
"git_branch" text DEFAULT 'main',
|
|
100
|
-
"git_url" text,
|
|
101
|
-
"installation_id" integer,
|
|
102
|
-
"framework" text DEFAULT 'unknown',
|
|
103
|
-
"package_manager" text DEFAULT 'npm',
|
|
104
|
-
"install_command" text,
|
|
105
|
-
"build_command" text,
|
|
106
|
-
"output_directory" text,
|
|
107
|
-
"production_paths" text,
|
|
108
|
-
"root_directory" text,
|
|
109
|
-
"start_command" text,
|
|
110
|
-
"build_image" text,
|
|
111
|
-
"production_mode" text DEFAULT 'host',
|
|
112
|
-
"port" integer DEFAULT 3000,
|
|
113
|
-
"has_server" boolean DEFAULT true NOT NULL,
|
|
114
|
-
"has_build" boolean DEFAULT true NOT NULL,
|
|
115
|
-
"resources" jsonb,
|
|
116
|
-
"build_resources" jsonb,
|
|
117
|
-
"sleep_mode" text DEFAULT 'auto_sleep',
|
|
118
|
-
"active_deployment_id" text,
|
|
119
|
-
"deleted_at" timestamp,
|
|
120
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
121
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
122
|
-
);
|
|
123
|
-
--> statement-breakpoint
|
|
124
|
-
CREATE TABLE "env_var" (
|
|
125
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
126
|
-
"project_id" text NOT NULL,
|
|
127
|
-
"key" text NOT NULL,
|
|
128
|
-
"value" text NOT NULL,
|
|
129
|
-
"environment" text DEFAULT 'production' NOT NULL,
|
|
130
|
-
"is_secret" boolean DEFAULT false NOT NULL,
|
|
131
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
132
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
133
|
-
);
|
|
134
|
-
--> statement-breakpoint
|
|
135
|
-
|
|
136
|
-
-- ── Deployments ─────────────────────────────────────────────────────────────
|
|
137
|
-
|
|
138
|
-
CREATE TABLE "deployment" (
|
|
139
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
140
|
-
"project_id" text NOT NULL,
|
|
141
|
-
"user_id" text NOT NULL,
|
|
142
|
-
"branch" text NOT NULL,
|
|
143
|
-
"commit_sha" text,
|
|
144
|
-
"commit_message" text,
|
|
145
|
-
"environment" text DEFAULT 'production' NOT NULL,
|
|
146
|
-
"framework" text,
|
|
147
|
-
"status" text DEFAULT 'queued' NOT NULL,
|
|
148
|
-
"image_ref" text,
|
|
149
|
-
"build_duration_ms" integer,
|
|
150
|
-
"container_id" text,
|
|
151
|
-
"url" text,
|
|
152
|
-
"meta" jsonb,
|
|
153
|
-
"env_vars" jsonb,
|
|
154
|
-
"error_message" text,
|
|
155
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
156
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
157
|
-
);
|
|
158
|
-
--> statement-breakpoint
|
|
159
|
-
CREATE TABLE "build_session" (
|
|
160
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
161
|
-
"deployment_id" text NOT NULL,
|
|
162
|
-
"project_id" text NOT NULL,
|
|
163
|
-
"status" text DEFAULT 'queued' NOT NULL,
|
|
164
|
-
"logs" jsonb,
|
|
165
|
-
"duration_ms" integer,
|
|
166
|
-
"started_at" timestamp,
|
|
167
|
-
"finished_at" timestamp,
|
|
168
|
-
"created_at" timestamp DEFAULT now() NOT NULL
|
|
169
|
-
);
|
|
170
|
-
--> statement-breakpoint
|
|
171
|
-
|
|
172
|
-
-- ── Domains ─────────────────────────────────────────────────────────────────
|
|
173
|
-
|
|
174
|
-
CREATE TABLE "domain" (
|
|
175
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
176
|
-
"project_id" text NOT NULL,
|
|
177
|
-
"hostname" text NOT NULL,
|
|
178
|
-
"is_primary" boolean DEFAULT false NOT NULL,
|
|
179
|
-
"status" text DEFAULT 'pending' NOT NULL,
|
|
180
|
-
"verification_token" text,
|
|
181
|
-
"verified" boolean DEFAULT false NOT NULL,
|
|
182
|
-
"verified_at" timestamp,
|
|
183
|
-
"ssl_status" text DEFAULT 'none' NOT NULL,
|
|
184
|
-
"ssl_issuer" text,
|
|
185
|
-
"ssl_expires_at" timestamp,
|
|
186
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
187
|
-
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
188
|
-
CONSTRAINT "domain_hostname_unique" UNIQUE("hostname")
|
|
189
|
-
);
|
|
190
|
-
--> statement-breakpoint
|
|
191
|
-
|
|
192
|
-
-- ── Git ─────────────────────────────────────────────────────────────────────
|
|
193
|
-
|
|
194
|
-
CREATE TABLE "git_installation" (
|
|
195
|
-
"id" text PRIMARY KEY NOT NULL,
|
|
196
|
-
"user_id" text NOT NULL,
|
|
197
|
-
"provider" text DEFAULT 'github' NOT NULL,
|
|
198
|
-
"installation_id" integer NOT NULL,
|
|
199
|
-
"owner" text NOT NULL,
|
|
200
|
-
"owner_type" text DEFAULT 'User' NOT NULL,
|
|
201
|
-
"provider_user_id" text,
|
|
202
|
-
"provider_owner_id" text,
|
|
203
|
-
"is_org" boolean DEFAULT false NOT NULL,
|
|
204
|
-
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
205
|
-
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
206
|
-
);
|
|
207
|
-
--> statement-breakpoint
|
|
208
|
-
|
|
209
|
-
-- ── Foreign keys ────────────────────────────────────────────────────────────
|
|
210
|
-
|
|
211
|
-
ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;
|
|
212
|
-
--> statement-breakpoint
|
|
213
|
-
ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;
|
|
214
|
-
--> statement-breakpoint
|
|
215
|
-
ALTER TABLE "user_settings" ADD CONSTRAINT "user_settings_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;
|
|
216
|
-
--> statement-breakpoint
|
|
217
|
-
ALTER TABLE "project" ADD CONSTRAINT "project_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;
|
|
218
|
-
--> statement-breakpoint
|
|
219
|
-
ALTER TABLE "env_var" ADD CONSTRAINT "env_var_project_id_project_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."project"("id") ON DELETE cascade ON UPDATE no action;
|
|
220
|
-
--> statement-breakpoint
|
|
221
|
-
ALTER TABLE "deployment" ADD CONSTRAINT "deployment_project_id_project_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."project"("id") ON DELETE cascade ON UPDATE no action;
|
|
222
|
-
--> statement-breakpoint
|
|
223
|
-
ALTER TABLE "deployment" ADD CONSTRAINT "deployment_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;
|
|
224
|
-
--> statement-breakpoint
|
|
225
|
-
ALTER TABLE "build_session" ADD CONSTRAINT "build_session_deployment_id_deployment_id_fk" FOREIGN KEY ("deployment_id") REFERENCES "public"."deployment"("id") ON DELETE cascade ON UPDATE no action;
|
|
226
|
-
--> statement-breakpoint
|
|
227
|
-
ALTER TABLE "build_session" ADD CONSTRAINT "build_session_project_id_project_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."project"("id") ON DELETE cascade ON UPDATE no action;
|
|
228
|
-
--> statement-breakpoint
|
|
229
|
-
ALTER TABLE "domain" ADD CONSTRAINT "domain_project_id_project_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."project"("id") ON DELETE cascade ON UPDATE no action;
|
|
230
|
-
--> statement-breakpoint
|
|
231
|
-
ALTER TABLE "git_installation" ADD CONSTRAINT "git_installation_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ALTER TABLE "instance_settings" ADD COLUMN "server_name" text;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": "7",
|
|
3
|
-
"dialect": "postgresql",
|
|
4
|
-
"entries": [
|
|
5
|
-
{
|
|
6
|
-
"idx": 0,
|
|
7
|
-
"version": "7",
|
|
8
|
-
"when": 1741852800000,
|
|
9
|
-
"tag": "0000_init",
|
|
10
|
-
"breakpoints": true
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"idx": 1,
|
|
14
|
-
"version": "7",
|
|
15
|
-
"when": 1742256000000,
|
|
16
|
-
"tag": "0001_add_server_name",
|
|
17
|
-
"breakpoints": true
|
|
18
|
-
}
|
|
19
|
-
]
|
|
20
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from "drizzle-kit";
|
|
2
|
-
|
|
3
|
-
export default defineConfig({
|
|
4
|
-
schema: "./src/schema/index.ts",
|
|
5
|
-
out: "./drizzle",
|
|
6
|
-
dialect: "postgresql",
|
|
7
|
-
dbCredentials: {
|
|
8
|
-
url: process.env.DATABASE_URL || "postgres://postgres:postgres@localhost:5432/openship",
|
|
9
|
-
},
|
|
10
|
-
});
|
package/packages/db/package.json
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@repo/db",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"type": "module",
|
|
5
|
-
"main": "src/index.ts",
|
|
6
|
-
"types": "src/index.ts",
|
|
7
|
-
"exports": {
|
|
8
|
-
".": {
|
|
9
|
-
"types": "./src/index.ts",
|
|
10
|
-
"import": "./src/index.ts"
|
|
11
|
-
},
|
|
12
|
-
"./schema": {
|
|
13
|
-
"types": "./src/schema/index.ts",
|
|
14
|
-
"import": "./src/schema/index.ts"
|
|
15
|
-
},
|
|
16
|
-
"./repos": {
|
|
17
|
-
"types": "./src/repos/index.ts",
|
|
18
|
-
"import": "./src/repos/index.ts"
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"scripts": {
|
|
22
|
-
"build": "tsup src/index.ts --format esm --dts --clean",
|
|
23
|
-
"dev": "tsup src/index.ts --format esm --dts --watch",
|
|
24
|
-
"lint": "tsc --noEmit",
|
|
25
|
-
"db:generate": "drizzle-kit generate",
|
|
26
|
-
"db:push": "drizzle-kit push",
|
|
27
|
-
"db:migrate": "drizzle-kit migrate",
|
|
28
|
-
"db:studio": "drizzle-kit studio",
|
|
29
|
-
"clean": "rm -rf dist .turbo node_modules"
|
|
30
|
-
},
|
|
31
|
-
"dependencies": {
|
|
32
|
-
"@repo/core": "workspace:*",
|
|
33
|
-
"drizzle-orm": "^0.45.1",
|
|
34
|
-
"pg": "^8.20.0",
|
|
35
|
-
"@electric-sql/pglite": "^0.3.15"
|
|
36
|
-
},
|
|
37
|
-
"devDependencies": {
|
|
38
|
-
"@types/node": "^22.13.0",
|
|
39
|
-
"@types/pg": "^8.11.0",
|
|
40
|
-
"drizzle-kit": "^0.31.9",
|
|
41
|
-
"tsup": "^8.5.1",
|
|
42
|
-
"typescript": "^5.9.3"
|
|
43
|
-
}
|
|
44
|
-
}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { mkdirSync, existsSync } from "fs";
|
|
2
|
-
import { resolve, dirname } from "path";
|
|
3
|
-
import { fileURLToPath } from "url";
|
|
4
|
-
import type { NodePgDatabase } from "drizzle-orm/node-postgres";
|
|
5
|
-
import type { PgliteDatabase } from "drizzle-orm/pglite";
|
|
6
|
-
import * as schema from "./schema";
|
|
7
|
-
|
|
8
|
-
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Unified database type — works regardless of driver (pg or PGlite).
|
|
12
|
-
* Every repo and service receives this; they never know which driver runs beneath.
|
|
13
|
-
*/
|
|
14
|
-
export type Database = NodePgDatabase<typeof schema> | PgliteDatabase<typeof schema>;
|
|
15
|
-
|
|
16
|
-
/** Which driver is active — useful for conditional logic in adapters */
|
|
17
|
-
export type Driver = "pg" | "pglite";
|
|
18
|
-
|
|
19
|
-
// ─── Internal state ──────────────────────────────────────────────────────────
|
|
20
|
-
|
|
21
|
-
let _driver: Driver;
|
|
22
|
-
|
|
23
|
-
export function getDriver(): Driver {
|
|
24
|
-
return _driver;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// ─── Resolved paths ─────────────────────────────────────────────────────────
|
|
28
|
-
|
|
29
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
30
|
-
const MIGRATIONS_DIR = resolve(__dirname, "../drizzle");
|
|
31
|
-
|
|
32
|
-
// ─── Data directory ──────────────────────────────────────────────────────────
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Resolves the PGlite data directory from environment or convention.
|
|
36
|
-
*
|
|
37
|
-
* Priority:
|
|
38
|
-
* 1) PGLITE_DATA_DIR env var — explicit path (recommended for self-hosted)
|
|
39
|
-
* 2) Default: ~/.openship/data (outside the project, won't be committed)
|
|
40
|
-
*/
|
|
41
|
-
function resolvePgliteDataDir(): string {
|
|
42
|
-
const explicit = process.env.PGLITE_DATA_DIR;
|
|
43
|
-
if (explicit) return resolve(explicit);
|
|
44
|
-
|
|
45
|
-
const home = process.env.HOME ?? process.env.USERPROFILE ?? "/tmp";
|
|
46
|
-
return resolve(home, ".openship", "data");
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// ─── Client factory ──────────────────────────────────────────────────────────
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Creates and returns a typed Drizzle database instance.
|
|
53
|
-
*
|
|
54
|
-
* Driver selection based on DATABASE_URL:
|
|
55
|
-
* postgres://... → node-postgres Pool (production / Docker self-host)
|
|
56
|
-
* empty / absent → PGlite embedded (zero-config dev, no Docker)
|
|
57
|
-
*
|
|
58
|
-
* PGlite data location (when active):
|
|
59
|
-
* PGLITE_DATA_DIR → explicit path (self-hosted customisation)
|
|
60
|
-
* _(default)_ → ~/.openship/data (outside the project)
|
|
61
|
-
*
|
|
62
|
-
* Migrations run automatically at startup from `packages/db/drizzle/`.
|
|
63
|
-
* Schema changes → `pnpm db:generate` → commit the new migration → restart.
|
|
64
|
-
*/
|
|
65
|
-
async function createDb(): Promise<Database> {
|
|
66
|
-
const url = process.env.DATABASE_URL ?? "";
|
|
67
|
-
|
|
68
|
-
if (url.startsWith("postgres")) {
|
|
69
|
-
return createPgClient(url);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return createPgliteClient();
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// ─── PostgreSQL (node-postgres) ──────────────────────────────────────────────
|
|
76
|
-
|
|
77
|
-
async function createPgClient(url: string): Promise<Database> {
|
|
78
|
-
_driver = "pg";
|
|
79
|
-
const { Pool } = await import("pg");
|
|
80
|
-
const { drizzle } = await import("drizzle-orm/node-postgres");
|
|
81
|
-
const pool = new Pool({
|
|
82
|
-
connectionString: url,
|
|
83
|
-
max: 20,
|
|
84
|
-
idleTimeoutMillis: 30_000,
|
|
85
|
-
connectionTimeoutMillis: 5_000,
|
|
86
|
-
});
|
|
87
|
-
const db = drizzle(pool, { schema });
|
|
88
|
-
|
|
89
|
-
// Run pending migrations
|
|
90
|
-
const { migrate } = await import("drizzle-orm/node-postgres/migrator");
|
|
91
|
-
await migrate(db, { migrationsFolder: MIGRATIONS_DIR });
|
|
92
|
-
|
|
93
|
-
return db;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// ─── PGlite (embedded PostgreSQL) ────────────────────────────────────────────
|
|
97
|
-
|
|
98
|
-
async function createPgliteClient(): Promise<Database> {
|
|
99
|
-
_driver = "pglite";
|
|
100
|
-
const dataDir = resolvePgliteDataDir();
|
|
101
|
-
if (!existsSync(dataDir)) {
|
|
102
|
-
mkdirSync(dataDir, { recursive: true });
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const { PGlite } = await import("@electric-sql/pglite");
|
|
106
|
-
const { drizzle } = await import("drizzle-orm/pglite");
|
|
107
|
-
const client = new PGlite(dataDir);
|
|
108
|
-
const db = drizzle(client, { schema });
|
|
109
|
-
|
|
110
|
-
// Run pending migrations
|
|
111
|
-
const { migrate } = await import("drizzle-orm/pglite/migrator");
|
|
112
|
-
await migrate(db, { migrationsFolder: MIGRATIONS_DIR });
|
|
113
|
-
|
|
114
|
-
return db;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// ─── Singleton export ────────────────────────────────────────────────────────
|
|
118
|
-
|
|
119
|
-
export const db = await createDb();
|