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.
Files changed (607) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +5786 -0
  3. package/dist/server/index.js +324319 -0
  4. package/dist/server/migrations/0000_init.sql +666 -0
  5. package/dist/server/migrations/0001_brief_tomorrow_man.sql +47 -0
  6. package/dist/server/migrations/0002_funny_dazzler.sql +2 -0
  7. package/dist/server/migrations/0003_third_killer_shrike.sql +1 -0
  8. package/dist/server/migrations/0004_session_active_org_not_null.sql +10 -0
  9. package/dist/server/migrations/0005_warm_amazoness.sql +3 -0
  10. package/dist/server/migrations/0006_lumpy_joystick.sql +1 -0
  11. package/dist/server/migrations/0007_outgoing_maginty.sql +2 -0
  12. package/dist/server/migrations/0008_frozen_cutover.sql +3 -0
  13. package/dist/server/migrations/0009_credits_billing.sql +142 -0
  14. package/dist/server/migrations/0010_credit_grant_dedupe.sql +14 -0
  15. package/dist/server/migrations/0011_remove_credit_ledger.sql +23 -0
  16. package/dist/server/migrations/0012_smart_deploys_and_git_rollback.sql +81 -0
  17. package/dist/server/migrations/0013_fix_check_run_rollup_unique.sql +38 -0
  18. package/dist/server/migrations/0014_default_rollback_git.sql +9 -0
  19. package/dist/server/migrations/0015_billing_idempotency_grants.sql +41 -0
  20. package/dist/server/migrations/0016_github_auth_high_findings.sql +30 -0
  21. package/dist/server/migrations/0017_spooky_rumiko_fujikawa.sql +6 -0
  22. package/dist/server/migrations/0018_calm_shatterstar.sql +1 -0
  23. package/dist/server/migrations/0019_rename_workspace_install_to_prepare.sql +1 -0
  24. package/dist/server/migrations/0020_uneven_the_renegades.sql +13 -0
  25. package/dist/server/migrations/0021_shiny_firestar.sql +2 -0
  26. package/dist/server/migrations/0022_version_on_success_backfill.sql +6 -0
  27. package/dist/server/migrations/0023_productive_gorilla_man.sql +17 -0
  28. package/dist/server/migrations/0024_sleepy_peter_quill.sql +2 -0
  29. package/dist/server/migrations/0025_smooth_blue_shield.sql +1 -0
  30. package/dist/server/migrations/0026_mail_backup_source.sql +11 -0
  31. package/dist/server/migrations/0027_opposite_anthem.sql +6 -0
  32. package/dist/server/migrations/0028_stale_rogue.sql +18 -0
  33. package/dist/server/migrations/0029_bouncy_loners.sql +16 -0
  34. package/dist/server/migrations/0030_bright_darkstar.sql +6 -0
  35. package/dist/server/migrations/0031_conscious_catseye.sql +13 -0
  36. package/dist/server/migrations/0032_wet_mimic.sql +51 -0
  37. package/dist/server/migrations/0033_eminent_molly_hayes.sql +2 -0
  38. package/dist/server/migrations/meta/0000_snapshot.json +5110 -0
  39. package/dist/server/migrations/meta/0001_snapshot.json +5257 -0
  40. package/dist/server/migrations/meta/0002_snapshot.json +5279 -0
  41. package/dist/server/migrations/meta/0003_snapshot.json +5286 -0
  42. package/dist/server/migrations/meta/0004_snapshot.json +5286 -0
  43. package/dist/server/migrations/meta/0005_snapshot.json +5305 -0
  44. package/dist/server/migrations/meta/0006_snapshot.json +5311 -0
  45. package/dist/server/migrations/meta/0007_snapshot.json +5323 -0
  46. package/dist/server/migrations/meta/0016_snapshot.json +6345 -0
  47. package/dist/server/migrations/meta/0017_snapshot.json +6383 -0
  48. package/dist/server/migrations/meta/0018_snapshot.json +6390 -0
  49. package/dist/server/migrations/meta/0019_snapshot.json +6390 -0
  50. package/dist/server/migrations/meta/0020_snapshot.json +6497 -0
  51. package/dist/server/migrations/meta/0021_snapshot.json +6509 -0
  52. package/dist/server/migrations/meta/0022_snapshot.json +6509 -0
  53. package/dist/server/migrations/meta/0023_snapshot.json +6629 -0
  54. package/dist/server/migrations/meta/0024_snapshot.json +6641 -0
  55. package/dist/server/migrations/meta/0025_snapshot.json +6648 -0
  56. package/dist/server/migrations/meta/0026_snapshot.json +6750 -0
  57. package/dist/server/migrations/meta/0027_snapshot.json +6757 -0
  58. package/dist/server/migrations/meta/0028_snapshot.json +6895 -0
  59. package/dist/server/migrations/meta/0029_snapshot.json +7028 -0
  60. package/dist/server/migrations/meta/0030_snapshot.json +7066 -0
  61. package/dist/server/migrations/meta/0031_snapshot.json +7181 -0
  62. package/dist/server/migrations/meta/0032_snapshot.json +7570 -0
  63. package/dist/server/migrations/meta/0033_snapshot.json +7597 -0
  64. package/dist/server/migrations/meta/_journal.json +244 -0
  65. package/dist/server/pglite/pglite.data +0 -0
  66. package/dist/server/pglite/pglite.wasm +0 -0
  67. package/package.json +31 -33
  68. package/.env.example +0 -38
  69. package/.nvmrc +0 -1
  70. package/.prettierrc +0 -7
  71. package/CONTRIBUTING.md +0 -90
  72. package/LICENSE +0 -661
  73. package/README.md +0 -360
  74. package/apps/api/.env.example +0 -30
  75. package/apps/api/Dockerfile +0 -22
  76. package/apps/api/package.json +0 -41
  77. package/apps/api/src/app.ts +0 -69
  78. package/apps/api/src/config/env.ts +0 -113
  79. package/apps/api/src/config/index.ts +0 -1
  80. package/apps/api/src/index.ts +0 -8
  81. package/apps/api/src/lib/auth-mode.ts +0 -42
  82. package/apps/api/src/lib/auth.ts +0 -105
  83. package/apps/api/src/lib/cache.ts +0 -128
  84. package/apps/api/src/lib/cloud-auth-proxy.ts +0 -310
  85. package/apps/api/src/lib/cloud-client.ts +0 -103
  86. package/apps/api/src/lib/compose-parser.ts +0 -138
  87. package/apps/api/src/lib/controller-helpers.ts +0 -90
  88. package/apps/api/src/lib/email-templates.ts +0 -94
  89. package/apps/api/src/lib/encryption.ts +0 -102
  90. package/apps/api/src/lib/local-user.ts +0 -65
  91. package/apps/api/src/lib/mail.ts +0 -48
  92. package/apps/api/src/lib/notifications.ts +0 -195
  93. package/apps/api/src/lib/openship-cloud.ts +0 -101
  94. package/apps/api/src/lib/resources.ts +0 -96
  95. package/apps/api/src/lib/screenshots.ts +0 -189
  96. package/apps/api/src/lib/ssh-manager.ts +0 -369
  97. package/apps/api/src/lib/ssl-scheduler.ts +0 -109
  98. package/apps/api/src/lib/stack-detector.ts +0 -708
  99. package/apps/api/src/lib/system-debug.ts +0 -10
  100. package/apps/api/src/middleware/auth.ts +0 -60
  101. package/apps/api/src/middleware/error-handler.ts +0 -41
  102. package/apps/api/src/middleware/index.ts +0 -5
  103. package/apps/api/src/middleware/internal-auth.ts +0 -40
  104. package/apps/api/src/middleware/local-only.ts +0 -20
  105. package/apps/api/src/middleware/rate-limiter.ts +0 -35
  106. package/apps/api/src/modules/analytics/analytics.controller.ts +0 -111
  107. package/apps/api/src/modules/analytics/analytics.routes.ts +0 -29
  108. package/apps/api/src/modules/analytics/analytics.schema.ts +0 -37
  109. package/apps/api/src/modules/analytics/analytics.service.ts +0 -264
  110. package/apps/api/src/modules/auth/auth.routes.ts +0 -237
  111. package/apps/api/src/modules/billing/billing.controller.ts +0 -60
  112. package/apps/api/src/modules/billing/billing.routes.ts +0 -34
  113. package/apps/api/src/modules/billing/billing.schema.ts +0 -9
  114. package/apps/api/src/modules/billing/billing.service.ts +0 -33
  115. package/apps/api/src/modules/cloud/cloud.controller.ts +0 -225
  116. package/apps/api/src/modules/cloud/cloud.routes.ts +0 -40
  117. package/apps/api/src/modules/deployments/build.service.ts +0 -791
  118. package/apps/api/src/modules/deployments/deployment-lifecycle.ts +0 -138
  119. package/apps/api/src/modules/deployments/deployment.controller.ts +0 -343
  120. package/apps/api/src/modules/deployments/deployment.routes.ts +0 -37
  121. package/apps/api/src/modules/deployments/deployment.schema.ts +0 -39
  122. package/apps/api/src/modules/deployments/deployment.service.ts +0 -190
  123. package/apps/api/src/modules/deployments/preflight.ts +0 -280
  124. package/apps/api/src/modules/deployments/prepare.service.ts +0 -252
  125. package/apps/api/src/modules/deployments/session-manager.ts +0 -283
  126. package/apps/api/src/modules/deployments/ssl.service.ts +0 -73
  127. package/apps/api/src/modules/domains/domain.controller.ts +0 -73
  128. package/apps/api/src/modules/domains/domain.routes.ts +0 -24
  129. package/apps/api/src/modules/domains/domain.schema.ts +0 -35
  130. package/apps/api/src/modules/domains/domain.service.ts +0 -385
  131. package/apps/api/src/modules/github/github.auth.ts +0 -397
  132. package/apps/api/src/modules/github/github.controller.ts +0 -387
  133. package/apps/api/src/modules/github/github.local-auth.ts +0 -251
  134. package/apps/api/src/modules/github/github.routes.ts +0 -50
  135. package/apps/api/src/modules/github/github.schema.ts +0 -52
  136. package/apps/api/src/modules/github/github.service.ts +0 -592
  137. package/apps/api/src/modules/github/github.types.ts +0 -158
  138. package/apps/api/src/modules/github/github.webhook.ts +0 -186
  139. package/apps/api/src/modules/github/index.ts +0 -16
  140. package/apps/api/src/modules/health/health.routes.ts +0 -45
  141. package/apps/api/src/modules/projects/project.controller.ts +0 -498
  142. package/apps/api/src/modules/projects/project.routes.ts +0 -67
  143. package/apps/api/src/modules/projects/project.schema.ts +0 -107
  144. package/apps/api/src/modules/projects/project.service.ts +0 -514
  145. package/apps/api/src/modules/settings/settings.controller.ts +0 -55
  146. package/apps/api/src/modules/settings/settings.routes.ts +0 -25
  147. package/apps/api/src/modules/settings/settings.service.ts +0 -49
  148. package/apps/api/src/modules/system/filesystem.controller.ts +0 -66
  149. package/apps/api/src/modules/system/index.ts +0 -1
  150. package/apps/api/src/modules/system/server-check.controller.ts +0 -475
  151. package/apps/api/src/modules/system/setup-session.ts +0 -255
  152. package/apps/api/src/modules/system/setup.controller.ts +0 -128
  153. package/apps/api/src/modules/system/system.routes.ts +0 -42
  154. package/apps/api/src/modules/webhooks/webhook.controller.ts +0 -64
  155. package/apps/api/src/modules/webhooks/webhook.routes.ts +0 -15
  156. package/apps/api/src/modules/webhooks/webhook.service.ts +0 -52
  157. package/apps/api/src/modules/webhooks/webhook.types.ts +0 -35
  158. package/apps/api/tsconfig.json +0 -14
  159. package/apps/cli/package.json +0 -26
  160. package/apps/cli/src/commands/deploy.ts +0 -11
  161. package/apps/cli/src/commands/init.ts +0 -8
  162. package/apps/cli/src/commands/login.ts +0 -8
  163. package/apps/cli/src/commands/logs.ts +0 -9
  164. package/apps/cli/src/index.ts +0 -21
  165. package/apps/cli/src/lib/api-client.ts +0 -35
  166. package/apps/cli/tsconfig.json +0 -13
  167. package/apps/dashboard/Dockerfile +0 -22
  168. package/apps/dashboard/components.json +0 -20
  169. package/apps/dashboard/next-env.d.ts +0 -6
  170. package/apps/dashboard/next.config.mjs +0 -16
  171. package/apps/dashboard/package.json +0 -40
  172. package/apps/dashboard/postcss.config.mjs +0 -5
  173. package/apps/dashboard/public/android-chrome-192x192.png +0 -0
  174. package/apps/dashboard/public/android-chrome-512x512.png +0 -0
  175. package/apps/dashboard/public/apple-touch-icon.png +0 -0
  176. package/apps/dashboard/public/favicon-16x16.png +0 -0
  177. package/apps/dashboard/public/favicon-32x32.png +0 -0
  178. package/apps/dashboard/public/favicon.ico +0 -0
  179. package/apps/dashboard/public/site.webmanifest +0 -19
  180. package/apps/dashboard/src/app/(auth)/forgot-password/page.tsx +0 -114
  181. package/apps/dashboard/src/app/(auth)/layout.tsx +0 -21
  182. package/apps/dashboard/src/app/(auth)/login/page.tsx +0 -220
  183. package/apps/dashboard/src/app/(auth)/providers.tsx +0 -34
  184. package/apps/dashboard/src/app/(auth)/register/page.tsx +0 -176
  185. package/apps/dashboard/src/app/(auth)/reset-password/page.tsx +0 -172
  186. package/apps/dashboard/src/app/(auth)/verify-email/page.tsx +0 -190
  187. package/apps/dashboard/src/app/(dashboard)/(deployment)/build/[id]/page.tsx +0 -162
  188. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/BuildSummary.tsx +0 -166
  189. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DnsConfiguration.tsx +0 -119
  190. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DomainSettings.tsx +0 -291
  191. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Header.tsx +0 -71
  192. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Sidebar.tsx +0 -270
  193. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/SkeletonLoader.tsx +0 -87
  194. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/page.tsx +0 -169
  195. package/apps/dashboard/src/app/(dashboard)/(deployment)/layout.tsx +0 -7
  196. package/apps/dashboard/src/app/(dashboard)/billing/page.tsx +0 -3
  197. package/apps/dashboard/src/app/(dashboard)/deployments/components/CommitDetailsModal.tsx +0 -240
  198. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentCard.tsx +0 -121
  199. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentHeader.tsx +0 -89
  200. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentMenu.tsx +0 -182
  201. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsContent.tsx +0 -324
  202. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsFilters.tsx +0 -99
  203. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsList.tsx +0 -31
  204. package/apps/dashboard/src/app/(dashboard)/deployments/components/EmptyState.tsx +0 -101
  205. package/apps/dashboard/src/app/(dashboard)/deployments/components/LoadingSkeleton.tsx +0 -57
  206. package/apps/dashboard/src/app/(dashboard)/deployments/components/ProjectFilter.tsx +0 -109
  207. package/apps/dashboard/src/app/(dashboard)/deployments/components/index.ts +0 -9
  208. package/apps/dashboard/src/app/(dashboard)/deployments/page.tsx +0 -14
  209. package/apps/dashboard/src/app/(dashboard)/deployments/types.ts +0 -44
  210. package/apps/dashboard/src/app/(dashboard)/deployments/utils.ts +0 -176
  211. package/apps/dashboard/src/app/(dashboard)/domains/page.tsx +0 -3
  212. package/apps/dashboard/src/app/(dashboard)/integrations/page.tsx +0 -321
  213. package/apps/dashboard/src/app/(dashboard)/layout.tsx +0 -27
  214. package/apps/dashboard/src/app/(dashboard)/library/components/ConnectPrompt.tsx +0 -187
  215. package/apps/dashboard/src/app/(dashboard)/library/components/LibrarySidebar.tsx +0 -147
  216. package/apps/dashboard/src/app/(dashboard)/library/components/LoadingSkeleton.tsx +0 -39
  217. package/apps/dashboard/src/app/(dashboard)/library/components/LocalProjects.tsx +0 -548
  218. package/apps/dashboard/src/app/(dashboard)/library/components/RepositoryList.tsx +0 -292
  219. package/apps/dashboard/src/app/(dashboard)/library/components/TemplateGrid.tsx +0 -36
  220. package/apps/dashboard/src/app/(dashboard)/library/components/UrlImport.tsx +0 -74
  221. package/apps/dashboard/src/app/(dashboard)/library/page.tsx +0 -121
  222. package/apps/dashboard/src/app/(dashboard)/library/types.ts +0 -26
  223. package/apps/dashboard/src/app/(dashboard)/monitoring/page.tsx +0 -3
  224. package/apps/dashboard/src/app/(dashboard)/page.tsx +0 -485
  225. package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/layout.tsx +0 -22
  226. package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/page.tsx +0 -286
  227. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/AdvancedSettings.tsx +0 -235
  228. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/BuildSettings.tsx +0 -174
  229. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeleteConfirmationDialog.tsx +0 -45
  230. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeletionModal.tsx +0 -95
  231. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/Deployments.tsx +0 -11
  232. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DomainSettings.tsx +0 -523
  233. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/EnvironmentSettings.tsx +0 -246
  234. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GeneralSettings.tsx +0 -93
  235. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitInfo.tsx +0 -261
  236. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitSettings.tsx +0 -391
  237. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/LogsSettings.tsx +0 -133
  238. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectNotFound.tsx +0 -95
  239. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectsBottomNavigation.tsx +0 -62
  240. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ResourceSettings.tsx +0 -333
  241. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingSection.tsx +0 -66
  242. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingsNavigation.tsx +0 -27
  243. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SleepModeSettings.tsx +0 -134
  244. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProductionUrl.tsx +0 -25
  245. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectIdentity.tsx +0 -159
  246. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectInfo.tsx +0 -58
  247. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/SkeletonLoader.tsx +0 -170
  248. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/StatsCards.tsx +0 -33
  249. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TopPaths.tsx +0 -56
  250. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TrafficChart.tsx +0 -157
  251. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/index.ts +0 -14
  252. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/LogsActions.tsx +0 -52
  253. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/ServerLogs.tsx +0 -249
  254. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/TerminalLogs.tsx +0 -682
  255. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/logs.css +0 -127
  256. package/apps/dashboard/src/app/(dashboard)/projects/components/DeploymentCard.tsx +0 -73
  257. package/apps/dashboard/src/app/(dashboard)/projects/components/ProjectCard.tsx +0 -330
  258. package/apps/dashboard/src/app/(dashboard)/projects/page.tsx +0 -330
  259. package/apps/dashboard/src/app/(dashboard)/providers.tsx +0 -23
  260. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/components-tab.tsx +0 -329
  261. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/overview-tab.tsx +0 -229
  262. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/terminal-tab.tsx +0 -38
  263. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/page.tsx +0 -437
  264. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/checking-state.tsx +0 -15
  265. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/choose-mode.tsx +0 -54
  266. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/component-row.tsx +0 -65
  267. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/error-banner.tsx +0 -13
  268. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/installing-panel.tsx +0 -227
  269. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/results-panel.tsx +0 -90
  270. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/setup-header.tsx +0 -56
  271. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/types.ts +0 -13
  272. package/apps/dashboard/src/app/(dashboard)/servers/new/page.tsx +0 -666
  273. package/apps/dashboard/src/app/(dashboard)/servers/page.tsx +0 -283
  274. package/apps/dashboard/src/app/(dashboard)/settings/_components/BuildPreferences.tsx +0 -110
  275. package/apps/dashboard/src/app/(dashboard)/settings/_components/CloudConnection.tsx +0 -147
  276. package/apps/dashboard/src/app/(dashboard)/settings/_components/InstanceInfo.tsx +0 -54
  277. package/apps/dashboard/src/app/(dashboard)/settings/_components/ServerConnection.tsx +0 -407
  278. package/apps/dashboard/src/app/(dashboard)/settings/_components/SettingsSection.tsx +0 -32
  279. package/apps/dashboard/src/app/(dashboard)/settings/page.tsx +0 -67
  280. package/apps/dashboard/src/app/auth/callback/close/page.tsx +0 -23
  281. package/apps/dashboard/src/app/auth/callback/install/page.tsx +0 -40
  282. package/apps/dashboard/src/app/authorize/page.tsx +0 -137
  283. package/apps/dashboard/src/app/globals.css +0 -57
  284. package/apps/dashboard/src/app/layout.tsx +0 -55
  285. package/apps/dashboard/src/components/auth-shell.tsx +0 -66
  286. package/apps/dashboard/src/components/deployments/types.ts +0 -44
  287. package/apps/dashboard/src/components/global-deployments/index.ts +0 -17
  288. package/apps/dashboard/src/components/i18n-provider.tsx +0 -100
  289. package/apps/dashboard/src/components/import-project/BuildSettings.tsx +0 -376
  290. package/apps/dashboard/src/components/import-project/BuildSkeleton.tsx +0 -161
  291. package/apps/dashboard/src/components/import-project/BuildTerminal.tsx +0 -358
  292. package/apps/dashboard/src/components/import-project/ComposeServices.tsx +0 -455
  293. package/apps/dashboard/src/components/import-project/DeploymentProcessing.tsx +0 -510
  294. package/apps/dashboard/src/components/import-project/DockerSettings.tsx +0 -64
  295. package/apps/dashboard/src/components/import-project/EnvironmentVariables.tsx +0 -481
  296. package/apps/dashboard/src/components/import-project/Frameworks.tsx +0 -90
  297. package/apps/dashboard/src/components/import-project/ProjectSettings.tsx +0 -160
  298. package/apps/dashboard/src/components/import-project/types.ts +0 -82
  299. package/apps/dashboard/src/components/integrations/GithubPermissionModal.tsx +0 -173
  300. package/apps/dashboard/src/components/language-switcher.tsx +0 -36
  301. package/apps/dashboard/src/components/logo.tsx +0 -13
  302. package/apps/dashboard/src/components/network-error-handler.tsx +0 -27
  303. package/apps/dashboard/src/components/oauth-buttons.tsx +0 -81
  304. package/apps/dashboard/src/components/overview/ActivityChart.tsx +0 -247
  305. package/apps/dashboard/src/components/overview/ApiRequestsCard.tsx +0 -111
  306. package/apps/dashboard/src/components/overview/CreditsCard.tsx +0 -137
  307. package/apps/dashboard/src/components/overview/DeploymentsChart.tsx +0 -195
  308. package/apps/dashboard/src/components/overview/EmptyState.tsx +0 -126
  309. package/apps/dashboard/src/components/overview/LoadingSkeleton.tsx +0 -92
  310. package/apps/dashboard/src/components/overview/OverviewHeader.tsx +0 -74
  311. package/apps/dashboard/src/components/overview/OverviewHeroChart.tsx +0 -344
  312. package/apps/dashboard/src/components/overview/ProjectsCard.tsx +0 -134
  313. package/apps/dashboard/src/components/overview/QuickLinks.tsx +0 -119
  314. package/apps/dashboard/src/components/overview/SandboxesCard.tsx +0 -150
  315. package/apps/dashboard/src/components/overview/StatsGrid.tsx +0 -166
  316. package/apps/dashboard/src/components/overview/TokenUsageChart.tsx +0 -206
  317. package/apps/dashboard/src/components/overview/UsageStats.tsx +0 -79
  318. package/apps/dashboard/src/components/overview/index.ts +0 -30
  319. package/apps/dashboard/src/components/overview/types.ts +0 -116
  320. package/apps/dashboard/src/components/page-header.tsx +0 -25
  321. package/apps/dashboard/src/components/project-settings/ServerSideSwitch.jsx +0 -60
  322. package/apps/dashboard/src/components/shared/AlertBox.tsx +0 -39
  323. package/apps/dashboard/src/components/shared/CTASection.tsx +0 -45
  324. package/apps/dashboard/src/components/shared/ErrorState.tsx +0 -176
  325. package/apps/dashboard/src/components/shared/FeatureCard.tsx +0 -20
  326. package/apps/dashboard/src/components/shared/MDXComponents.tsx +0 -24
  327. package/apps/dashboard/src/components/shared/MachineSettingsModal.tsx +0 -286
  328. package/apps/dashboard/src/components/shared/Modal.tsx +0 -39
  329. package/apps/dashboard/src/components/shared/OTPInput.tsx +0 -122
  330. package/apps/dashboard/src/components/shared/PageHero.tsx +0 -21
  331. package/apps/dashboard/src/components/shared/PlatformFeatureCard.tsx +0 -27
  332. package/apps/dashboard/src/components/shared/StatCard.tsx +0 -14
  333. package/apps/dashboard/src/components/shared/ValueCard.tsx +0 -20
  334. package/apps/dashboard/src/components/shared/index.ts +0 -8
  335. package/apps/dashboard/src/components/sidebar.tsx +0 -282
  336. package/apps/dashboard/src/components/theme-provider.tsx +0 -96
  337. package/apps/dashboard/src/components/toast.tsx +0 -106
  338. package/apps/dashboard/src/components/ui/CustomCursor.tsx +0 -107
  339. package/apps/dashboard/src/components/ui/CustomSelect.tsx +0 -126
  340. package/apps/dashboard/src/components/ui/DropdownMenu.tsx +0 -174
  341. package/apps/dashboard/src/components/ui/FileIcon.jsx +0 -59
  342. package/apps/dashboard/src/components/ui/IconPickerModal.tsx +0 -273
  343. package/apps/dashboard/src/components/ui/InfoBanner.jsx +0 -39
  344. package/apps/dashboard/src/components/ui/Logo.tsx +0 -14
  345. package/apps/dashboard/src/components/ui/Modal.tsx +0 -117
  346. package/apps/dashboard/src/components/ui/PageContainer.tsx +0 -12
  347. package/apps/dashboard/src/components/ui/SectionContainer.jsx +0 -7
  348. package/apps/dashboard/src/components/ui/SlidingToggle.tsx +0 -128
  349. package/apps/dashboard/src/components/ui/Toast.tsx +0 -29
  350. package/apps/dashboard/src/components/ui/button.tsx +0 -58
  351. package/apps/dashboard/src/components/ui/card.tsx +0 -60
  352. package/apps/dashboard/src/components/ui/input.tsx +0 -20
  353. package/apps/dashboard/src/components/ui/label.tsx +0 -19
  354. package/apps/dashboard/src/components/ui/select.tsx +0 -10
  355. package/apps/dashboard/src/components/ui/textarea.tsx +0 -9
  356. package/apps/dashboard/src/constants/lang-colors.ts +0 -25
  357. package/apps/dashboard/src/constants/mock.ts +0 -38
  358. package/apps/dashboard/src/context/AuthContext.tsx +0 -91
  359. package/apps/dashboard/src/context/CloudContext.tsx +0 -275
  360. package/apps/dashboard/src/context/DeploymentContext.tsx +0 -71
  361. package/apps/dashboard/src/context/GitHubContext.tsx +0 -288
  362. package/apps/dashboard/src/context/ModalContext.tsx +0 -300
  363. package/apps/dashboard/src/context/NetworkContext.tsx +0 -32
  364. package/apps/dashboard/src/context/ProjectSettingsContext.tsx +0 -727
  365. package/apps/dashboard/src/context/ToastContext.tsx +0 -129
  366. package/apps/dashboard/src/context/deployment/index.ts +0 -3
  367. package/apps/dashboard/src/context/deployment/types.ts +0 -183
  368. package/apps/dashboard/src/context/deployment/useDeploymentBuild.ts +0 -547
  369. package/apps/dashboard/src/context/deployment/useDeploymentConfig.ts +0 -176
  370. package/apps/dashboard/src/hooks/useBuildConnection.ts +0 -334
  371. package/apps/dashboard/src/hooks/useMonitorStream.ts +0 -146
  372. package/apps/dashboard/src/hooks/useProjectData.ts +0 -110
  373. package/apps/dashboard/src/hooks/useSSEConnection.ts +0 -465
  374. package/apps/dashboard/src/hooks/useSSEStream.ts +0 -309
  375. package/apps/dashboard/src/hooks/useSessions.ts +0 -104
  376. package/apps/dashboard/src/hooks/useSetupStream.ts +0 -223
  377. package/apps/dashboard/src/i18n/dictionaries/ar.json +0 -218
  378. package/apps/dashboard/src/i18n/dictionaries/en.json +0 -218
  379. package/apps/dashboard/src/i18n/index.ts +0 -16
  380. package/apps/dashboard/src/lib/api/ai.ts +0 -22
  381. package/apps/dashboard/src/lib/api/auth.ts +0 -13
  382. package/apps/dashboard/src/lib/api/client.ts +0 -199
  383. package/apps/dashboard/src/lib/api/cloud.ts +0 -15
  384. package/apps/dashboard/src/lib/api/deploy.ts +0 -58
  385. package/apps/dashboard/src/lib/api/domains.ts +0 -13
  386. package/apps/dashboard/src/lib/api/endpoints.ts +0 -129
  387. package/apps/dashboard/src/lib/api/github.ts +0 -31
  388. package/apps/dashboard/src/lib/api/icons.ts +0 -12
  389. package/apps/dashboard/src/lib/api/index.ts +0 -41
  390. package/apps/dashboard/src/lib/api/projects.ts +0 -153
  391. package/apps/dashboard/src/lib/api/sandbox.ts +0 -14
  392. package/apps/dashboard/src/lib/api/settings.ts +0 -21
  393. package/apps/dashboard/src/lib/api/system.ts +0 -159
  394. package/apps/dashboard/src/lib/auth-client.ts +0 -54
  395. package/apps/dashboard/src/lib/country.ts +0 -25
  396. package/apps/dashboard/src/lib/server/api.ts +0 -140
  397. package/apps/dashboard/src/lib/server/session.ts +0 -103
  398. package/apps/dashboard/src/lib/sseClient.ts +0 -241
  399. package/apps/dashboard/src/lib/sseMessageProcessors.ts +0 -323
  400. package/apps/dashboard/src/lib/utils.ts +0 -6
  401. package/apps/dashboard/src/proxy.ts +0 -46
  402. package/apps/dashboard/src/styles/Toast.module.css +0 -92
  403. package/apps/dashboard/src/styles/fonts.css +0 -93
  404. package/apps/dashboard/src/styles/theme.css +0 -336
  405. package/apps/dashboard/src/types/research.ts +0 -42
  406. package/apps/dashboard/src/utils/SSEParser.js +0 -150
  407. package/apps/dashboard/src/utils/authWindow.ts +0 -143
  408. package/apps/dashboard/src/utils/codeTheme.ts +0 -127
  409. package/apps/dashboard/src/utils/colors.json +0 -2810
  410. package/apps/dashboard/src/utils/date.ts +0 -121
  411. package/apps/dashboard/src/utils/deployment.ts +0 -128
  412. package/apps/dashboard/src/utils/deploymentPhaseDetector.ts +0 -232
  413. package/apps/dashboard/src/utils/extToLang.js +0 -103
  414. package/apps/dashboard/src/utils/github.ts +0 -62
  415. package/apps/dashboard/src/utils/icons.js +0 -46
  416. package/apps/dashboard/src/utils/repoSlug.ts +0 -110
  417. package/apps/dashboard/src/utils/research-api.ts +0 -163
  418. package/apps/dashboard/src/utils/suggestions.ts +0 -84
  419. package/apps/dashboard/src/utils/theme.js +0 -1
  420. package/apps/dashboard/src/utils/ui-helpers.tsx +0 -30
  421. package/apps/dashboard/src/utils/upload.js +0 -12
  422. package/apps/dashboard/tsconfig.json +0 -33
  423. package/apps/desktop/forge.config.json +0 -36
  424. package/apps/desktop/package.json +0 -26
  425. package/apps/desktop/scripts/dev.mjs +0 -58
  426. package/apps/desktop/src/main/index.ts +0 -675
  427. package/apps/desktop/src/main/types/desktop.d.ts +0 -33
  428. package/apps/desktop/src/preload/index.ts +0 -88
  429. package/apps/desktop/src/renderer/index.html +0 -462
  430. package/apps/desktop/src/renderer/onboarding.js +0 -511
  431. package/apps/desktop/src/renderer/styles.css +0 -1139
  432. package/apps/desktop/tsconfig.json +0 -17
  433. package/apps/web/.source/browser.ts +0 -13
  434. package/apps/web/.source/dynamic.ts +0 -8
  435. package/apps/web/.source/server.ts +0 -22
  436. package/apps/web/.source/source.config.mjs +0 -20
  437. package/apps/web/Dockerfile +0 -22
  438. package/apps/web/content/blog/how-ai-builds-work.mdx +0 -55
  439. package/apps/web/content/blog/introducing-openship.mdx +0 -46
  440. package/apps/web/content/blog/self-hosting-cost-breakdown.mdx +0 -59
  441. package/apps/web/content/docs/_meta.json +0 -14
  442. package/apps/web/content/docs/api.mdx +0 -98
  443. package/apps/web/content/docs/cli.mdx +0 -80
  444. package/apps/web/content/docs/first-deployment.mdx +0 -56
  445. package/apps/web/content/docs/index.mdx +0 -27
  446. package/apps/web/content/docs/installation.mdx +0 -65
  447. package/apps/web/content/docs/quickstart.mdx +0 -45
  448. package/apps/web/next-env.d.ts +0 -6
  449. package/apps/web/next.config.mjs +0 -20
  450. package/apps/web/package.json +0 -33
  451. package/apps/web/postcss.config.mjs +0 -5
  452. package/apps/web/public/android-chrome-192x192.png +0 -0
  453. package/apps/web/public/android-chrome-512x512.png +0 -0
  454. package/apps/web/public/apple-touch-icon.png +0 -0
  455. package/apps/web/public/favicon-16x16.png +0 -0
  456. package/apps/web/public/favicon-32x32.png +0 -0
  457. package/apps/web/public/favicon.ico +0 -0
  458. package/apps/web/public/site.webmanifest +0 -1
  459. package/apps/web/source.config.ts +0 -17
  460. package/apps/web/src/app/(marketing)/layout.tsx +0 -9
  461. package/apps/web/src/app/(marketing)/page.tsx +0 -2
  462. package/apps/web/src/app/(marketing)/pricing/page.tsx +0 -10
  463. package/apps/web/src/app/blog/[...slug]/page.tsx +0 -247
  464. package/apps/web/src/app/blog/blog.css +0 -575
  465. package/apps/web/src/app/blog/layout.tsx +0 -50
  466. package/apps/web/src/app/blog/page.tsx +0 -235
  467. package/apps/web/src/app/docs/[[...slug]]/page.tsx +0 -67
  468. package/apps/web/src/app/docs/layout.tsx +0 -62
  469. package/apps/web/src/app/docs/toc-theme.css +0 -71
  470. package/apps/web/src/app/download/page.tsx +0 -396
  471. package/apps/web/src/app/globals.css +0 -20
  472. package/apps/web/src/app/layout.tsx +0 -70
  473. package/apps/web/src/app/page.tsx +0 -51
  474. package/apps/web/src/app/robots.ts +0 -15
  475. package/apps/web/src/app/sitemap.ts +0 -35
  476. package/apps/web/src/components/blog/share-sidebar.tsx +0 -81
  477. package/apps/web/src/components/blog/writer-sidebar.tsx +0 -81
  478. package/apps/web/src/components/landing/ai-native.tsx +0 -169
  479. package/apps/web/src/components/landing/backups.tsx +0 -139
  480. package/apps/web/src/components/landing/cdn.tsx +0 -109
  481. package/apps/web/src/components/landing/coming-soon.tsx +0 -180
  482. package/apps/web/src/components/landing/dark-section.tsx +0 -166
  483. package/apps/web/src/components/landing/dashboard.tsx +0 -407
  484. package/apps/web/src/components/landing/developer-experience.tsx +0 -224
  485. package/apps/web/src/components/landing/dns-domains.tsx +0 -146
  486. package/apps/web/src/components/landing/download-button.tsx +0 -151
  487. package/apps/web/src/components/landing/features/ai-visual.tsx +0 -48
  488. package/apps/web/src/components/landing/features/cloud-visual.tsx +0 -44
  489. package/apps/web/src/components/landing/features/git-visual.tsx +0 -61
  490. package/apps/web/src/components/landing/features/index.tsx +0 -642
  491. package/apps/web/src/components/landing/features/infra-visual.tsx +0 -69
  492. package/apps/web/src/components/landing/features/rollback-visual.tsx +0 -42
  493. package/apps/web/src/components/landing/features/ssl-visual.tsx +0 -41
  494. package/apps/web/src/components/landing/features/stacks-visual.tsx +0 -54
  495. package/apps/web/src/components/landing/final-cta.tsx +0 -116
  496. package/apps/web/src/components/landing/footer.tsx +0 -145
  497. package/apps/web/src/components/landing/hero.tsx +0 -110
  498. package/apps/web/src/components/landing/how-it-works.tsx +0 -210
  499. package/apps/web/src/components/landing/index.ts +0 -21
  500. package/apps/web/src/components/landing/mail-server.tsx +0 -122
  501. package/apps/web/src/components/landing/navbar.tsx +0 -199
  502. package/apps/web/src/components/landing/no-lockin.tsx +0 -185
  503. package/apps/web/src/components/landing/open-source-cta.tsx +0 -151
  504. package/apps/web/src/components/landing/portability.tsx +0 -190
  505. package/apps/web/src/components/landing/pricing.tsx +0 -263
  506. package/apps/web/src/components/landing/scaling.tsx +0 -209
  507. package/apps/web/src/components/landing/why-openship.tsx +0 -291
  508. package/apps/web/src/hooks/use-gsap-scroll.ts +0 -158
  509. package/apps/web/src/hooks/use-platform.ts +0 -86
  510. package/apps/web/src/lib/source.ts +0 -12
  511. package/apps/web/src/styles/fonts.css +0 -84
  512. package/apps/web/src/styles/landing.css +0 -951
  513. package/apps/web/src/styles/theme.css +0 -227
  514. package/apps/web/tsconfig.json +0 -16
  515. package/bun.lock +0 -3260
  516. package/docker-compose.yml +0 -90
  517. package/docs/screenshots/.gitkeep +0 -0
  518. package/docs/screenshots/screen.png +0 -0
  519. package/openship.code-workspace +0 -7
  520. package/packages/adapters/docs/ARCHITECTURE.md +0 -160
  521. package/packages/adapters/docs/BUILD-PIPELINE.md +0 -171
  522. package/packages/adapters/docs/CLOUD.md +0 -239
  523. package/packages/adapters/docs/EXECUTOR.md +0 -174
  524. package/packages/adapters/docs/LOG-STREAMING.md +0 -175
  525. package/packages/adapters/docs/SYSTEM.md +0 -191
  526. package/packages/adapters/package.json +0 -32
  527. package/packages/adapters/src/index.ts +0 -144
  528. package/packages/adapters/src/infra/cloud.ts +0 -42
  529. package/packages/adapters/src/infra/index.ts +0 -9
  530. package/packages/adapters/src/infra/noop.ts +0 -27
  531. package/packages/adapters/src/infra/traefik.ts +0 -297
  532. package/packages/adapters/src/infra/types.ts +0 -36
  533. package/packages/adapters/src/platform.ts +0 -255
  534. package/packages/adapters/src/runtime/bare.ts +0 -567
  535. package/packages/adapters/src/runtime/build-pipeline.ts +0 -237
  536. package/packages/adapters/src/runtime/cloud.ts +0 -791
  537. package/packages/adapters/src/runtime/deploy-pipeline.ts +0 -146
  538. package/packages/adapters/src/runtime/docker.ts +0 -443
  539. package/packages/adapters/src/runtime/index.ts +0 -69
  540. package/packages/adapters/src/runtime/local-build.ts +0 -112
  541. package/packages/adapters/src/runtime/transfer.ts +0 -82
  542. package/packages/adapters/src/runtime/types.ts +0 -138
  543. package/packages/adapters/src/system/catalog.ts +0 -188
  544. package/packages/adapters/src/system/checks.ts +0 -228
  545. package/packages/adapters/src/system/components.ts +0 -45
  546. package/packages/adapters/src/system/debug.ts +0 -18
  547. package/packages/adapters/src/system/environment.ts +0 -168
  548. package/packages/adapters/src/system/errors.ts +0 -34
  549. package/packages/adapters/src/system/executor.ts +0 -600
  550. package/packages/adapters/src/system/index.ts +0 -58
  551. package/packages/adapters/src/system/installer.ts +0 -310
  552. package/packages/adapters/src/system/setup.ts +0 -442
  553. package/packages/adapters/src/system/state.ts +0 -96
  554. package/packages/adapters/src/system/types.ts +0 -116
  555. package/packages/adapters/src/toolchain/catalog.ts +0 -439
  556. package/packages/adapters/src/toolchain/checks.ts +0 -181
  557. package/packages/adapters/src/toolchain/index.ts +0 -38
  558. package/packages/adapters/src/toolchain/installer.ts +0 -189
  559. package/packages/adapters/src/toolchain/types.ts +0 -84
  560. package/packages/adapters/src/types.ts +0 -277
  561. package/packages/adapters/tsconfig.json +0 -11
  562. package/packages/core/package.json +0 -27
  563. package/packages/core/src/constants.ts +0 -71
  564. package/packages/core/src/errors.ts +0 -49
  565. package/packages/core/src/index.ts +0 -6
  566. package/packages/core/src/stacks.ts +0 -778
  567. package/packages/core/src/system.ts +0 -111
  568. package/packages/core/src/types.ts +0 -68
  569. package/packages/core/src/utils.ts +0 -43
  570. package/packages/core/tsconfig.json +0 -11
  571. package/packages/db/drizzle/0000_init.sql +0 -231
  572. package/packages/db/drizzle/0001_add_server_name.sql +0 -1
  573. package/packages/db/drizzle/meta/_journal.json +0 -20
  574. package/packages/db/drizzle.config.ts +0 -10
  575. package/packages/db/package.json +0 -44
  576. package/packages/db/src/client.ts +0 -119
  577. package/packages/db/src/index.ts +0 -60
  578. package/packages/db/src/repos/account.repo.ts +0 -92
  579. package/packages/db/src/repos/deployment.repo.ts +0 -168
  580. package/packages/db/src/repos/domain.repo.ts +0 -102
  581. package/packages/db/src/repos/git-installation.repo.ts +0 -95
  582. package/packages/db/src/repos/index.ts +0 -43
  583. package/packages/db/src/repos/instance-settings.repo.ts +0 -43
  584. package/packages/db/src/repos/project.repo.ts +0 -159
  585. package/packages/db/src/repos/session.repo.ts +0 -82
  586. package/packages/db/src/repos/settings.repo.ts +0 -51
  587. package/packages/db/src/repos/user.repo.ts +0 -94
  588. package/packages/db/src/schema/auth.ts +0 -56
  589. package/packages/db/src/schema/deployment.ts +0 -87
  590. package/packages/db/src/schema/domain.ts +0 -46
  591. package/packages/db/src/schema/github.ts +0 -24
  592. package/packages/db/src/schema/index.ts +0 -6
  593. package/packages/db/src/schema/project.ts +0 -117
  594. package/packages/db/src/schema/settings.ts +0 -103
  595. package/packages/db/tsconfig.json +0 -11
  596. package/packages/ui/package.json +0 -38
  597. package/packages/ui/src/components/badge.tsx +0 -29
  598. package/packages/ui/src/components/button.tsx +0 -44
  599. package/packages/ui/src/components/card.tsx +0 -26
  600. package/packages/ui/src/components/status-dot.tsx +0 -25
  601. package/packages/ui/src/globals.css +0 -18
  602. package/packages/ui/src/index.tsx +0 -8
  603. package/packages/ui/src/lib/cn.ts +0 -7
  604. package/packages/ui/tsconfig.json +0 -14
  605. package/pnpm-workspace.yaml +0 -3
  606. package/tsconfig.base.json +0 -18
  607. package/turbo.json +0 -36
@@ -1,90 +0,0 @@
1
- # ──────────────────────────────────────────────────────────
2
- # Openship — Self-Hosted Docker Compose
3
- #
4
- # Quick start:
5
- # cp .env.example .env
6
- # docker compose up -d
7
- #
8
- # This spins up the full Openship stack:
9
- # • Dashboard (Next.js) → localhost:3001
10
- # • Web / Landing → localhost:3000
11
- # • API (Hono) → localhost:4000
12
- # • PostgreSQL → localhost:5432
13
- # • Redis → localhost:6379
14
- # ──────────────────────────────────────────────────────────
15
-
16
- version: "3.9"
17
-
18
- services:
19
- # ─── Database ─────────────────────────────────────────
20
- postgres:
21
- image: postgres:16-alpine
22
- restart: unless-stopped
23
- environment:
24
- POSTGRES_USER: openship
25
- POSTGRES_PASSWORD: openship
26
- POSTGRES_DB: openship
27
- ports:
28
- - "5432:5432"
29
- volumes:
30
- - postgres_data:/var/lib/postgresql/data
31
-
32
- # ─── Cache / Queue ───────────────────────────────────
33
- redis:
34
- image: redis:7-alpine
35
- restart: unless-stopped
36
- ports:
37
- - "6379:6379"
38
- volumes:
39
- - redis_data:/data
40
-
41
- # ─── API ──────────────────────────────────────────────
42
- api:
43
- build:
44
- context: .
45
- dockerfile: apps/api/Dockerfile
46
- restart: unless-stopped
47
- ports:
48
- - "4000:4000"
49
- environment:
50
- NODE_ENV: production
51
- PORT: 4000
52
- CLOUD_MODE: "false"
53
- DEPLOY_MODE: docker
54
- DATABASE_URL: postgresql://openship:openship@postgres:5432/openship
55
- REDIS_URL: redis://redis:6379
56
- JWT_SECRET: change-me-in-production
57
- BETTER_AUTH_SECRET: change-me-in-production # used for session signing
58
- TRUSTED_ORIGINS: http://localhost:3001,http://localhost:3000
59
- depends_on:
60
- - postgres
61
- - redis
62
-
63
- # ─── Dashboard ────────────────────────────────────────
64
- dashboard:
65
- build:
66
- context: .
67
- dockerfile: apps/dashboard/Dockerfile
68
- restart: unless-stopped
69
- ports:
70
- - "3001:3001"
71
- environment:
72
- NODE_ENV: production
73
- NEXT_PUBLIC_API_URL: http://api:4000/api
74
- depends_on:
75
- - api
76
-
77
- # ─── Web / Landing ───────────────────────────────────
78
- web:
79
- build:
80
- context: .
81
- dockerfile: apps/web/Dockerfile
82
- restart: unless-stopped
83
- ports:
84
- - "3000:3000"
85
- environment:
86
- NODE_ENV: production
87
-
88
- volumes:
89
- postgres_data:
90
- redis_data:
File without changes
Binary file
@@ -1,7 +0,0 @@
1
- {
2
- "folders": [
3
- {
4
- "path": "."
5
- }
6
- ]
7
- }
@@ -1,160 +0,0 @@
1
- # Platform Architecture
2
-
3
- > `@repo/adapters` — the abstraction layer between Openship's API and the underlying infrastructure.
4
-
5
- ## Three Deployment Targets
6
-
7
- The same codebase runs in three completely different environments. The `createPlatform()` factory resolves the correct combination at startup based on config.
8
-
9
- ```
10
- ┌────────────────┬──────────────────────┬──────────────────────────┬─────────────────────┐
11
- │ │ cloud (Oblien) │ selfhosted │ desktop │
12
- ├────────────────┼──────────────────────┼──────────────────────────┼─────────────────────┤
13
- │ Runtime │ CloudRuntime │ DockerRuntime or │ BareRuntime │
14
- │ │ (pure API calls) │ BareRuntime │ (local executor) │
15
- ├────────────────┼──────────────────────┼──────────────────────────┼─────────────────────┤
16
- │ Routing │ CloudInfraProvider │ TraefikProvider │ NoopInfraProvider │
17
- │ │ (pure API calls) │ (writes YAML via exec) │ (silent no-op) │
18
- ├────────────────┼──────────────────────┼──────────────────────────┼─────────────────────┤
19
- │ SSL │ CloudInfraProvider │ TraefikProvider (ACME) │ NoopInfraProvider │
20
- │ │ (pure API calls) │ (file ops via exec) │ (no-op) │
21
- ├────────────────┼──────────────────────┼──────────────────────────┼─────────────────────┤
22
- │ System │ null │ SystemManager │ null │
23
- │ │ (no RCE at all) │ (checks + installers) │ (no setup needed) │
24
- ├────────────────┼──────────────────────┼──────────────────────────┼─────────────────────┤
25
- │ Executor │ null │ LocalExecutor or │ null │
26
- │ │ (nothing executes) │ SshExecutor (shared) │ (BareRuntime owns) │
27
- ├────────────────┼──────────────────────┼──────────────────────────┼─────────────────────┤
28
- │ ssh2 loaded? │ NO │ Only if SSH config set │ NO │
29
- └────────────────┴──────────────────────┴──────────────────────────┴─────────────────────┘
30
- ```
31
-
32
- ## Three Layers
33
-
34
- Each layer has a single responsibility. They are composed by the Platform, never used directly.
35
-
36
- ### 1. Runtime — build/deploy/stop lifecycle
37
-
38
- | Class | Transport | Use Case |
39
- |---|---|---|
40
- | `DockerRuntime` | dockerode (socket / SSH / TLS) | Self-hosted with Docker |
41
- | `BareRuntime` | `CommandExecutor` (local or SSH) | Self-hosted bare metal, desktop |
42
- | `CloudRuntime` | HTTP API calls (Oblien SDK) | Oblien cloud |
43
-
44
- - Docker has its **own** SSH transport via dockerode — separate from the shared executor
45
- - Bare uses the **shared** executor for everything (git, npm, nohup, kill, PID files)
46
- - Cloud makes **zero** local calls — pure API stubs
47
-
48
- ### 2. Infra — routing + SSL
49
-
50
- | Class | Transport | Use Case |
51
- |---|---|---|
52
- | `TraefikProvider` | `CommandExecutor` (dual-path) | Self-hosted |
53
- | `CloudInfraProvider` | HTTP API calls (Oblien SDK) | Oblien cloud |
54
- | `NoopInfraProvider` | Nothing | Desktop / dev |
55
-
56
- - Traefik writes YAML config files to a watched directory via the executor
57
- - SSL is Traefik's built-in ACME resolver — cert info read via the executor
58
- - The executor enables Traefik config to be written on the local machine OR a remote server via SSH
59
-
60
- ### 3. System — prerequisite checks + server setup
61
-
62
- | Class | Transport | Use Case |
63
- |---|---|---|
64
- | `SystemManager` | `CommandExecutor` | Self-hosted only |
65
- | _null_ | — | Cloud and Desktop (no setup needed) |
66
-
67
- - Checks: docker, traefik, git, node, bun — all via executor
68
- - Installers: automated install scripts with real-time log streaming
69
- - State: cached in `SetupStateStore` (file or DB), 24h auto-reverification
70
- - Feature gating: `requireFeature("deploy")` reads cached state (free on hot paths)
71
-
72
- ## File Map
73
-
74
- ```
75
- src/
76
- ├── types.ts # Shared types: configs, CommandExecutor, SshConfig
77
- ├── platform.ts # Factory + singleton (createPlatform, getPlatform)
78
- ├── index.ts # Barrel exports
79
-
80
- ├── runtime/
81
- │ ├── types.ts # RuntimeAdapter interface, RuntimeCapability
82
- │ ├── docker.ts # DockerRuntime (dockerode)
83
- │ ├── bare.ts # BareRuntime (executor-based)
84
- │ ├── cloud.ts # CloudRuntime (API stubs)
85
- │ └── index.ts # Factory + re-exports
86
-
87
- ├── infra/
88
- │ ├── types.ts # RoutingProvider, SslProvider interfaces
89
- │ ├── traefik.ts # Traefik file provider (dual-path via executor)
90
- │ ├── cloud.ts # Cloud infra (API stubs)
91
- │ └── noop.ts # No-op (desktop/dev)
92
-
93
- └── system/
94
- ├── types.ts # SystemLog, ComponentStatus, InstallerConfig, etc.
95
- ├── executor.ts # LocalExecutor, SshExecutor, createExecutor()
96
- ├── state.ts # SetupStateStore interface, FileStateStore
97
- ├── checks.ts # Component health checks (all via executor)
98
- ├── installer.ts # Component installers (all via executor)
99
- ├── setup.ts # SystemManager orchestrator
100
- └── index.ts # Barrel exports
101
- ```
102
-
103
- ## How It's Wired
104
-
105
- ```
106
- ┌─────────────────────────────────────────────────────────────────┐
107
- │ API (apps/api) │
108
- │ │
109
- │ app.ts: bootstrapPlatform() │
110
- │ │ │
111
- │ ▼ │
112
- │ controller-helpers.ts: resolveConfig() → initPlatform() │
113
- │ platform() → getPlatform() │
114
- │ │
115
- │ service code: const { runtime, routing, ssl } = platform() │
116
- │ await runtime.build(config, onLog) │
117
- │ await routing.registerRoute({ domain, ... }) │
118
- │ await ssl.provisionCert(domain) │
119
- └─────────────────────────────────────────────────────────────────┘
120
-
121
-
122
- ┌─────────────────────────────────────────────────────────────────┐
123
- │ @repo/adapters │
124
- │ │
125
- │ createPlatform(config) ─┬─ "cloud" → CloudRuntime │
126
- │ │ + CloudInfraProvider │
127
- │ │ + system: null │
128
- │ │ + executor: null │
129
- │ │ │
130
- │ ├─ "selfhosted" → Docker/BareRuntime │
131
- │ │ + TraefikProvider │
132
- │ │ + SystemManager │
133
- │ │ + executor ─┐ │
134
- │ │ │ │
135
- │ │ ┌───────────────────────┘ │
136
- │ │ │ shared across: │
137
- │ │ │ • BareRuntime (if bare mode) │
138
- │ │ │ • TraefikProvider │
139
- │ │ │ • SystemManager │
140
- │ │ │ • checks.ts + installer.ts │
141
- │ │ │
142
- │ └─ "desktop" → BareRuntime (own) │
143
- │ + NoopInfraProvider │
144
- │ + system: null │
145
- │ + executor: null │
146
- └─────────────────────────────────────────────────────────────────┘
147
- ```
148
-
149
- ## Environment Variables
150
-
151
- | Variable | Values | Effect |
152
- |---|---|---|
153
- | `CLOUD_MODE` | `true` / `false` | Force cloud target (overrides DEPLOY_MODE) |
154
- | `DEPLOY_MODE` | `docker` / `bare` / `cloud` / `desktop` | Select runtime + target |
155
-
156
- Resolution priority in `resolveConfig()`:
157
- 1. `CLOUD_MODE=true` or `DEPLOY_MODE=cloud` → `target: "cloud"`
158
- 2. `DEPLOY_MODE=desktop` → `target: "desktop"`
159
- 3. Everything else → `target: "selfhosted"` + `runtime: DEPLOY_MODE`
160
- 4. Default (nothing set) → `target: "selfhosted"`, `runtime: "docker"`
@@ -1,171 +0,0 @@
1
- # Build Pipeline & Process Management
2
-
3
- > How builds run, how processes are tracked, and how cleanup works across all runtimes.
4
-
5
- ## Build Flow
6
-
7
- All three runtimes implement `build()` but with completely different transports:
8
-
9
- ```
10
- build.service.ts
11
-
12
- │ Creates BuildLogger (single source of truth for all log emission)
13
- │ Creates logCallback → pushes to logs[] + SSE broadcast
14
-
15
-
16
- runtime.build(config, logger)
17
-
18
- ├─ CloudRuntime → Oblien API: workspace.build() + execAndStream()
19
- ├─ BareRuntime → executor.streamExec() through runBuildPipeline()
20
- └─ DockerRuntime → (stub — Docker builds via Dockerfile)
21
- ```
22
-
23
- ## BuildLogger — Single Source of Truth
24
-
25
- Every log emission goes through `BuildLogger`. No adapter creates `LogEntry` objects with step metadata directly.
26
-
27
- ```typescript
28
- class BuildLogger {
29
- log(message: string, level?) // Plain log line
30
- step(step, status, message) // Step lifecycle event (stepper UI)
31
- runStep(step, label, fn) // Run a step: emit running → execute → completed/failed
32
- get callback(): LogCallback // Pass to exec functions for raw output streaming
33
- }
34
- ```
35
-
36
- ### Who calls what
37
-
38
- | Caller | Method | Purpose |
39
- |---|---|---|
40
- | `runBuildPipeline()` | `logger.runStep("clone", ...)` | Step events for clone/install/build |
41
- | `runBuildPipeline()` | `logger.log(...)` | Pipeline status messages |
42
- | `build.service.ts` | `logger.step("deploy", ...)` | Deploy phase step events |
43
- | `build.service.ts` | `logger.log(...)` | Deploy status messages |
44
- | `executor.streamExec()` | `logger.callback` (raw `LogCallback`) | stdout/stderr lines from shell commands |
45
- | `cloud.ts execAndStream()` | raw `LogCallback` | Oblien exec output chunks |
46
-
47
- ## Shared Build Pipeline
48
-
49
- `runBuildPipeline()` is used by `BareRuntime` and would be used by `DockerRuntime` when it supports builds. `CloudRuntime` has its own build flow via the Oblien API.
50
-
51
- ```
52
- runBuildPipeline(env, config, logger)
53
-
54
- ├─ Step: clone
55
- │ env.exec(`git clone --branch ${branch} --depth 1 ${repo} .`, logger.callback)
56
-
57
- ├─ Step: install
58
- │ env.exec(`npm install` / `yarn` / `pnpm install`, logger.callback)
59
-
60
- ├─ Step: build (if buildCommand configured)
61
- │ env.exec(buildCommand, logger.callback)
62
-
63
- └─ Returns { status: "deploying" | "failed", durationMs }
64
- ```
65
-
66
- The `BuildEnvironment` abstraction decouples the pipeline from the executor:
67
-
68
- ```typescript
69
- interface BuildEnvironment {
70
- projectDir: string;
71
- exec(command: string, onLog: LogCallback): Promise<void>;
72
- }
73
- ```
74
-
75
- BareRuntime wires it to `this.executor.streamExec()`. A future Docker build could wire it to `docker exec`.
76
-
77
- ## Process Management (Bare Runtime)
78
-
79
- ### Deploy — setsid for proper process groups
80
-
81
- ```
82
- deploy(config)
83
-
84
- │ setsid nohup npm start >> logfile 2>&1 &
85
- │ echo $!
86
- │ │
87
- │ └─ PID captured → written to .pids/{deploymentId}.pid
88
-
89
- └─ setsid makes npm the process group leader
90
- so all child processes belong to the same PGID
91
- ```
92
-
93
- ### Stop — kill the entire tree
94
-
95
- ```
96
- stop(containerId)
97
-
98
- │ 1. Read PID from .pids/{containerId}.pid
99
- │ 2. kill -- -${pid} ← SIGTERM the entire process group
100
- │ (fallback: kill ${pid} if group kill not supported)
101
- │ 3. Wait up to 10s for graceful shutdown
102
- │ 4. kill -9 -- -${pid} ← SIGKILL the group if still alive
103
-
104
- └─ This ensures child processes (e.g., node spawned by npm)
105
- are cleaned up too — no orphans
106
- ```
107
-
108
- ### PID Tracking
109
-
110
- ```
111
- ${workDir}/
112
- .pids/
113
- {deploymentId}.pid ← contains the PID as plain text
114
- .logs/
115
- {deploymentId}.log ← stdout + stderr from the process
116
- ```
117
-
118
- All PID operations go through the executor:
119
- - `readPid()` → `executor.readFile(pidFile)`
120
- - `writePid()` → `executor.writeFile(pidFile, pid)`
121
- - `isAlive()` → `executor.exec("kill -0 ${pid}")`
122
-
123
- This means PID management works identically on local and remote (SSH) servers.
124
-
125
- ### Build Cancellation
126
-
127
- ```
128
- cancelBuild(sessionId)
129
-
130
- │ Read PID from .pids/build-{sessionId}.pid
131
- │ kill -- -${pid} ← kill entire build process group
132
-
133
- └─ Kills git clone, npm install, or whatever is running
134
- ```
135
-
136
- ## Resource Configuration
137
-
138
- ```typescript
139
- interface ResourceConfig {
140
- cpuCores: number; // Fractional cores (e.g., 0.5, 1, 2)
141
- memoryMb: number; // Memory in megabytes
142
- }
143
-
144
- // Defaults
145
- DEFAULT_RESOURCE_CONFIG = { cpuCores: 0.5, memoryMb: 512 } // runtime
146
- DEFAULT_BUILD_RESOURCE_CONFIG = { cpuCores: 2, memoryMb: 4096 } // build
147
- ```
148
-
149
- - Cloud: `cpuCores` passed directly to Oblien SDK (fractional, e.g., 0.5)
150
- - Docker: used for container resource limits
151
- - Bare: informational only (OS manages resources)
152
-
153
- ## Error Handling
154
-
155
- Build failures cascade cleanly:
156
-
157
- ```
158
- Pipeline step fails (e.g., npm install exits non-zero)
159
-
160
- ├─ executor.streamExec returns { code: non-zero }
161
- ├─ BuildEnvironment.exec throws Error
162
- ├─ runBuildPipeline catches → logger.step(step, "failed", message)
163
- ├─ Returns { status: "failed" }
164
-
165
-
166
- build.service.ts
167
- ├─ Updates deployment status to "failed"
168
- ├─ Persists logs to DB via finishBuildSession()
169
- ├─ Broadcasts failure via SSE
170
- └─ Sends failure notification email
171
- ```
@@ -1,239 +0,0 @@
1
- # Cloud Architecture
2
-
3
- > How Openship connects to Oblien cloud infrastructure — same pipeline, two auth paths.
4
-
5
- ## Overview
6
-
7
- Openship runs in two modes. Both use the **exact same** `CloudRuntime` and build/deploy pipeline. The only difference is how the Oblien SDK client gets authenticated:
8
-
9
- ```
10
- ┌─────────────────────────────────────────────────────────────────────────┐
11
- │ CloudRuntime(client) │
12
- │ │
13
- │ build() → provisionBuildWorkspace → runBuildPipeline → deploy() │
14
- │ stop() / start() / restart() / destroy() │
15
- │ logs / metrics / domain management │
16
- │ │
17
- │ Doesn't know or care HOW the Oblien client was authenticated. │
18
- └────────────────────────────┬────────────────────────────────────────────┘
19
-
20
- ┌──────────────┴──────────────┐
21
- │ │
22
- ┌──────────▼──────────┐ ┌───────────▼───────────┐
23
- │ SaaS (CLOUD_MODE) │ │ Local (!CLOUD_MODE) │
24
- │ │ │ │
25
- │ Master credentials │ │ Namespace token │
26
- │ clientId + secret │ │ from stored session │
27
- │ │ │ │
28
- │ new Oblien({ │ │ new Oblien({ │
29
- │ clientId, │ │ token │
30
- │ clientSecret │ │ }) │
31
- │ }) │ │ │
32
- │ │ │ Scoped to user's │
33
- │ Full platform │ │ namespace (os-{uid}) │
34
- │ access │ │ 30min TTL │
35
- └─────────────────────┘ └────────────────────────┘
36
- ```
37
-
38
- ## Mode 1: SaaS (`CLOUD_MODE=true`)
39
-
40
- When Openship runs as the hosted SaaS platform (api.openship.io):
41
-
42
- ```
43
- Server startup
44
- → initPlatform({ target: "cloud", cloudClientId, cloudClientSecret })
45
- → new Oblien({ clientId, clientSecret }) ← master creds from env
46
- → CloudRuntime(client) ← singleton, stays for process lifetime
47
- → build.service.ts uses platform().runtime directly
48
- ```
49
-
50
- The SaaS also exposes a token endpoint for local instances:
51
-
52
- ```
53
- POST /api/cloud/token (requires auth)
54
- → ensureNamespace(userId) ← creates os-{userId} namespace if needed
55
- → client.tokens.create({ scope: "namespace", namespace, ttl: 1800 })
56
- → { token, namespace, expiresAt }
57
- ```
58
-
59
- ### Key files
60
-
61
- | File | Purpose |
62
- |---|---|
63
- | `apps/api/src/lib/openship-cloud.ts` | `ensureNamespace()` + `issueNamespaceToken()` |
64
- | `apps/api/src/modules/cloud/cloud.controller.ts` | `getToken()` handler |
65
- | `apps/api/src/modules/cloud/cloud.routes.ts` | `cloudSaasRoutes` → `POST /token` |
66
-
67
- ## Mode 2: Local (`CLOUD_MODE=false`)
68
-
69
- When Openship runs locally (desktop app, self-hosted, CLI):
70
-
71
- ### Step 1: User connects their Openship Cloud account
72
-
73
- ```
74
- Dashboard Settings page
75
- → user enters email + password
76
- → POST /api/cloud/connect
77
- → Local API proxies login to api.openship.io/api/auth/sign-in/email
78
- → Receives session token
79
- → Encrypts + stores in user_settings.cloud_session_token
80
- ```
81
-
82
- ### Step 2: Deploy to cloud
83
-
84
- ```
85
- build.service.ts → executeBuildAndDeploy()
86
- → detects !CLOUD_MODE && target === "cloud"
87
- → getCloudToken(userId)
88
- → reads encrypted session from DB
89
- → POST api.openship.io/api/cloud/token (with Bearer session)
90
- → receives namespace-scoped Oblien token (cached in memory, 30min TTL)
91
- → createPlatform({ target: "cloud", cloudToken: result.token })
92
- → new Oblien({ token }) ← namespace-scoped
93
- → CloudRuntime(client) ← per-deploy instance
94
- → same build() → same deploy() → same everything
95
- ```
96
-
97
- ### Key files
98
-
99
- | File | Purpose |
100
- |---|---|
101
- | `apps/api/src/lib/cloud-client.ts` | `connectCloud()`, `disconnectCloud()`, `isCloudConnected()`, `getCloudToken()` |
102
- | `apps/api/src/modules/cloud/cloud.controller.ts` | `connect()`, `disconnect()`, `status()` handlers |
103
- | `apps/api/src/modules/cloud/cloud.routes.ts` | `cloudLocalRoutes` → `POST /connect`, `POST /disconnect`, `GET /status` |
104
- | `apps/dashboard/src/app/(dashboard)/settings/page.tsx` | Cloud connection UI |
105
- | `apps/dashboard/src/lib/api/cloud.ts` | `cloudApi` client-side helpers |
106
-
107
- ## Auth Flow Diagram
108
-
109
- ```
110
- LOCAL MODE — full round trip:
111
-
112
- ┌──────────────┐ POST /api/cloud/connect
113
- │ Dashboard │ ──────────────────────────────▶ ┌──────────────┐
114
- │ Settings │ { email, password } │ Local API │
115
- │ │ │ │
116
- │ │ { connected: true } │ cloud │
117
- │ │ ◀────────────────────────────────│ controller │
118
- └──────────────┘ └──────┬───────┘
119
-
120
- POST /api/auth/sign-in │
121
- { email, password } │
122
-
123
- ┌──────────────┐
124
- │ Openship │
125
- │ Cloud SaaS │
126
- │ │
127
- │ Returns │
128
- │ session token│
129
- └──────────────┘
130
-
131
- encrypt(token) │
132
- store in DB │
133
-
134
- ┌──────────────┐
135
- │ user_settings│
136
- │ cloud_session│
137
- │ _token (enc) │
138
- └──────────────┘
139
-
140
-
141
- DEPLOY TIME:
142
-
143
- ┌──────────────┐ ┌──────────────┐
144
- │ build.service│ ── getCloudToken(userId) ──────▶ │ cloud-client │
145
- │ │ │ │
146
- │ │ │ 1. read DB │
147
- │ │ │ 2. decrypt │
148
- │ │ { token, namespace } │ 3. POST /api │
149
- │ │ ◀────────────────────────────────│ /cloud │
150
- └──────┬───────┘ │ /token │
151
- │ └──────┬───────┘
152
- │ createPlatform({ │
153
- │ target: "cloud", ▼
154
- │ cloudToken: token ┌──────────────────────────┐
155
- │ }) │ Openship Cloud SaaS │
156
- │ │ │
157
- ▼ │ ensureNamespace(userId) │
158
- ┌──────────────┐ │ issueNamespaceToken() │
159
- │ CloudRuntime │ │ │
160
- │ │ │ Returns Oblien namespace │
161
- │ new Oblien({ │ │ token (30min TTL) │
162
- │ token │ └──────────────────────────┘
163
- │ }) │
164
- │ │
165
- │ build() │──────▶ Oblien API (workspaces, runtime, deploy...)
166
- │ deploy() │
167
- └──────────────┘
168
- ```
169
-
170
- ## Namespace Model
171
-
172
- Each user gets an isolated Oblien namespace:
173
-
174
- - **Slug**: `os-{userId}`
175
- - **Creation**: Idempotent — 409 on duplicate is caught, existing namespace fetched
176
- - **Cached**: In-memory `Map<userId, slug>` on SaaS server
177
-
178
- The namespace token gives full access to everything in that namespace:
179
- - Create/manage workspaces
180
- - Build & deploy
181
- - Domain management
182
- - Logs & metrics
183
-
184
- ## Security
185
-
186
- | Concern | Approach |
187
- |---|---|
188
- | Cloud session at rest | AES-256 encrypted via `encrypt()`/`decrypt()` in `encryption.ts` |
189
- | Session in transit | HTTPS only (api.openship.io) |
190
- | Expired sessions | Auto-cleared on 401 from SaaS API |
191
- | Namespace tokens | 30min TTL, 5min refresh buffer, in-memory cache only |
192
- | Token scope | Namespace-scoped — user can only access their own resources |
193
- | No browser cookies | Session lives server-side in DB, never exposed to dashboard |
194
-
195
- ## API Endpoints
196
-
197
- ### SaaS routes (`CLOUD_MODE=true`, mounted at `/api/cloud`)
198
-
199
- | Method | Path | Handler | Purpose |
200
- |---|---|---|---|
201
- | POST | `/token` | `getToken` | Mint namespace-scoped Oblien token |
202
-
203
- ### Local routes (`CLOUD_MODE=false`, mounted at `/api/cloud`)
204
-
205
- | Method | Path | Handler | Purpose |
206
- |---|---|---|---|
207
- | POST | `/connect` | `connect` | Proxy login → store encrypted session |
208
- | POST | `/disconnect` | `disconnect` | Clear stored session |
209
- | GET | `/status` | `status` | Check connection state |
210
-
211
- ### Dashboard API (`apps/dashboard/src/lib/api/cloud.ts`)
212
-
213
- ```typescript
214
- cloudApi.connect(email, password) // POST /api/cloud/connect
215
- cloudApi.disconnect() // POST /api/cloud/disconnect
216
- cloudApi.status() // GET /api/cloud/status
217
- ```
218
-
219
- ## Route Mounting (`app.ts`)
220
-
221
- ```typescript
222
- if (env.CLOUD_MODE) {
223
- // SaaS: mint tokens for local instances
224
- app.route("/api/cloud", cloudSaasRoutes);
225
- } else {
226
- // Local: manage connection to Openship Cloud
227
- app.route("/api/cloud", cloudLocalRoutes);
228
- }
229
- ```
230
-
231
- Dynamic imports ensure zero code bleed between modes.
232
-
233
- ## Database
234
-
235
- | Table | Column | Type | Purpose |
236
- |---|---|---|---|
237
- | `user_settings` | `cloud_session_token` | `text` (nullable) | Encrypted Openship Cloud session |
238
-
239
- Migration: `packages/db/drizzle/0004_add_cloud_session_token.sql`