openship 0.1.0 → 0.1.1

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 (531) hide show
  1. package/.env.example +19 -3
  2. package/CONTRIBUTING.md +69 -19
  3. package/LICENSE +661 -0
  4. package/README.md +304 -108
  5. package/apps/api/Dockerfile +6 -8
  6. package/apps/api/package.json +25 -21
  7. package/apps/api/src/app.ts +46 -3
  8. package/apps/api/src/config/env.ts +81 -7
  9. package/apps/api/src/lib/auth-mode.ts +42 -0
  10. package/apps/api/src/lib/auth.ts +105 -0
  11. package/apps/api/src/lib/cache.ts +128 -0
  12. package/apps/api/src/lib/cloud-auth-proxy.ts +310 -0
  13. package/apps/api/src/lib/cloud-client.ts +103 -0
  14. package/apps/api/src/lib/compose-parser.ts +138 -0
  15. package/apps/api/src/lib/controller-helpers.ts +90 -0
  16. package/apps/api/src/lib/email-templates.ts +94 -0
  17. package/apps/api/src/lib/encryption.ts +102 -0
  18. package/apps/api/src/lib/local-user.ts +65 -0
  19. package/apps/api/src/lib/mail.ts +48 -0
  20. package/apps/api/src/lib/notifications.ts +195 -0
  21. package/apps/api/src/lib/openship-cloud.ts +101 -0
  22. package/apps/api/src/lib/resources.ts +96 -0
  23. package/apps/api/src/lib/screenshots.ts +189 -0
  24. package/apps/api/src/lib/ssh-manager.ts +369 -0
  25. package/apps/api/src/lib/ssl-scheduler.ts +109 -0
  26. package/apps/api/src/lib/stack-detector.ts +708 -0
  27. package/apps/api/src/lib/system-debug.ts +10 -0
  28. package/apps/api/src/middleware/auth.ts +49 -13
  29. package/apps/api/src/middleware/error-handler.ts +23 -3
  30. package/apps/api/src/middleware/index.ts +2 -0
  31. package/apps/api/src/middleware/internal-auth.ts +40 -0
  32. package/apps/api/src/middleware/local-only.ts +20 -0
  33. package/apps/api/src/middleware/rate-limiter.ts +9 -0
  34. package/apps/api/src/modules/analytics/analytics.controller.ts +111 -0
  35. package/apps/api/src/modules/analytics/analytics.routes.ts +29 -0
  36. package/apps/api/src/modules/analytics/analytics.schema.ts +37 -0
  37. package/apps/api/src/modules/analytics/analytics.service.ts +264 -0
  38. package/apps/api/src/modules/auth/auth.routes.ts +233 -6
  39. package/apps/api/src/modules/billing/billing.routes.ts +8 -0
  40. package/apps/api/src/modules/cloud/cloud.controller.ts +225 -0
  41. package/apps/api/src/modules/cloud/cloud.routes.ts +40 -0
  42. package/apps/api/src/modules/deployments/build.service.ts +791 -0
  43. package/apps/api/src/modules/deployments/deployment-lifecycle.ts +138 -0
  44. package/apps/api/src/modules/deployments/deployment.controller.ts +324 -16
  45. package/apps/api/src/modules/deployments/deployment.routes.ts +33 -7
  46. package/apps/api/src/modules/deployments/deployment.schema.ts +37 -5
  47. package/apps/api/src/modules/deployments/deployment.service.ts +178 -11
  48. package/apps/api/src/modules/deployments/preflight.ts +280 -0
  49. package/apps/api/src/modules/deployments/prepare.service.ts +252 -0
  50. package/apps/api/src/modules/deployments/session-manager.ts +283 -0
  51. package/apps/api/src/modules/deployments/ssl.service.ts +73 -0
  52. package/apps/api/src/modules/domains/domain.controller.ts +59 -7
  53. package/apps/api/src/modules/domains/domain.routes.ts +20 -5
  54. package/apps/api/src/modules/domains/domain.schema.ts +35 -0
  55. package/apps/api/src/modules/domains/domain.service.ts +375 -9
  56. package/apps/api/src/modules/github/github.auth.ts +397 -0
  57. package/apps/api/src/modules/github/github.controller.ts +387 -0
  58. package/apps/api/src/modules/github/github.local-auth.ts +251 -0
  59. package/apps/api/src/modules/github/github.routes.ts +50 -0
  60. package/apps/api/src/modules/github/github.schema.ts +52 -0
  61. package/apps/api/src/modules/github/github.service.ts +592 -0
  62. package/apps/api/src/modules/github/github.types.ts +158 -0
  63. package/apps/api/src/modules/github/github.webhook.ts +186 -0
  64. package/apps/api/src/modules/github/index.ts +16 -0
  65. package/apps/api/src/modules/health/health.routes.ts +35 -0
  66. package/apps/api/src/modules/projects/project.controller.ts +481 -12
  67. package/apps/api/src/modules/projects/project.routes.ts +63 -6
  68. package/apps/api/src/modules/projects/project.schema.ts +104 -6
  69. package/apps/api/src/modules/projects/project.service.ts +502 -11
  70. package/apps/api/src/modules/settings/settings.controller.ts +55 -0
  71. package/apps/api/src/modules/settings/settings.routes.ts +25 -0
  72. package/apps/api/src/modules/settings/settings.service.ts +49 -0
  73. package/apps/api/src/modules/system/filesystem.controller.ts +66 -0
  74. package/apps/api/src/modules/system/index.ts +1 -0
  75. package/apps/api/src/modules/system/server-check.controller.ts +475 -0
  76. package/apps/api/src/modules/system/setup-session.ts +255 -0
  77. package/apps/api/src/modules/system/setup.controller.ts +128 -0
  78. package/apps/api/src/modules/system/system.routes.ts +42 -0
  79. package/apps/api/src/modules/webhooks/webhook.controller.ts +57 -15
  80. package/apps/api/src/modules/webhooks/webhook.routes.ts +11 -8
  81. package/apps/api/src/modules/webhooks/webhook.service.ts +46 -5
  82. package/apps/api/src/modules/webhooks/webhook.types.ts +35 -0
  83. package/apps/api/tsconfig.json +3 -1
  84. package/apps/cli/package.json +8 -10
  85. package/apps/cli/tsconfig.json +2 -1
  86. package/apps/dashboard/Dockerfile +4 -6
  87. package/apps/dashboard/components.json +20 -0
  88. package/apps/dashboard/next-env.d.ts +6 -0
  89. package/apps/dashboard/next.config.mjs +11 -1
  90. package/apps/dashboard/package.json +25 -13
  91. package/apps/dashboard/postcss.config.mjs +5 -0
  92. package/apps/dashboard/public/android-chrome-192x192.png +0 -0
  93. package/apps/dashboard/public/android-chrome-512x512.png +0 -0
  94. package/apps/dashboard/public/apple-touch-icon.png +0 -0
  95. package/apps/dashboard/public/favicon-16x16.png +0 -0
  96. package/apps/dashboard/public/favicon-32x32.png +0 -0
  97. package/apps/dashboard/public/favicon.ico +0 -0
  98. package/apps/dashboard/public/site.webmanifest +19 -0
  99. package/apps/dashboard/src/app/(auth)/forgot-password/page.tsx +114 -0
  100. package/apps/dashboard/src/app/(auth)/layout.tsx +18 -3
  101. package/apps/dashboard/src/app/(auth)/login/page.tsx +215 -6
  102. package/apps/dashboard/src/app/(auth)/providers.tsx +34 -0
  103. package/apps/dashboard/src/app/(auth)/register/page.tsx +171 -5
  104. package/apps/dashboard/src/app/(auth)/reset-password/page.tsx +172 -0
  105. package/apps/dashboard/src/app/(auth)/verify-email/page.tsx +190 -0
  106. package/apps/dashboard/src/app/(dashboard)/(deployment)/build/[id]/page.tsx +162 -0
  107. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/BuildSummary.tsx +166 -0
  108. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DnsConfiguration.tsx +119 -0
  109. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/DomainSettings.tsx +291 -0
  110. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Header.tsx +71 -0
  111. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/Sidebar.tsx +270 -0
  112. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/components/SkeletonLoader.tsx +87 -0
  113. package/apps/dashboard/src/app/(dashboard)/(deployment)/deploy/[slug]/page.tsx +169 -0
  114. package/apps/dashboard/src/app/(dashboard)/(deployment)/layout.tsx +7 -0
  115. package/apps/dashboard/src/app/(dashboard)/billing/page.tsx +1 -8
  116. package/apps/dashboard/src/app/(dashboard)/deployments/components/CommitDetailsModal.tsx +240 -0
  117. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentCard.tsx +121 -0
  118. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentHeader.tsx +89 -0
  119. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentMenu.tsx +182 -0
  120. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsContent.tsx +324 -0
  121. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsFilters.tsx +99 -0
  122. package/apps/dashboard/src/app/(dashboard)/deployments/components/DeploymentsList.tsx +31 -0
  123. package/apps/dashboard/src/app/(dashboard)/deployments/components/EmptyState.tsx +101 -0
  124. package/apps/dashboard/src/app/(dashboard)/deployments/components/LoadingSkeleton.tsx +57 -0
  125. package/apps/dashboard/src/app/(dashboard)/deployments/components/ProjectFilter.tsx +109 -0
  126. package/apps/dashboard/src/app/(dashboard)/deployments/components/index.ts +9 -0
  127. package/apps/dashboard/src/app/(dashboard)/deployments/page.tsx +9 -3
  128. package/apps/dashboard/src/app/(dashboard)/deployments/types.ts +44 -0
  129. package/apps/dashboard/src/app/(dashboard)/deployments/utils.ts +176 -0
  130. package/apps/dashboard/src/app/(dashboard)/domains/page.tsx +1 -6
  131. package/apps/dashboard/src/app/(dashboard)/integrations/page.tsx +321 -0
  132. package/apps/dashboard/src/app/(dashboard)/layout.tsx +22 -32
  133. package/apps/dashboard/src/app/(dashboard)/library/components/ConnectPrompt.tsx +187 -0
  134. package/apps/dashboard/src/app/(dashboard)/library/components/LibrarySidebar.tsx +147 -0
  135. package/apps/dashboard/src/app/(dashboard)/library/components/LoadingSkeleton.tsx +39 -0
  136. package/apps/dashboard/src/app/(dashboard)/library/components/LocalProjects.tsx +548 -0
  137. package/apps/dashboard/src/app/(dashboard)/library/components/RepositoryList.tsx +292 -0
  138. package/apps/dashboard/src/app/(dashboard)/library/components/TemplateGrid.tsx +36 -0
  139. package/apps/dashboard/src/app/(dashboard)/library/components/UrlImport.tsx +74 -0
  140. package/apps/dashboard/src/app/(dashboard)/library/page.tsx +121 -0
  141. package/apps/dashboard/src/app/(dashboard)/library/types.ts +26 -0
  142. package/apps/dashboard/src/app/(dashboard)/monitoring/page.tsx +1 -6
  143. package/apps/dashboard/src/app/(dashboard)/page.tsx +485 -0
  144. package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/layout.tsx +22 -0
  145. package/apps/dashboard/src/app/(dashboard)/projects/[id]/[[...slug]]/page.tsx +286 -0
  146. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/AdvancedSettings.tsx +235 -0
  147. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/BuildSettings.tsx +174 -0
  148. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeleteConfirmationDialog.tsx +45 -0
  149. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DeletionModal.tsx +95 -0
  150. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/Deployments.tsx +11 -0
  151. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/DomainSettings.tsx +523 -0
  152. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/EnvironmentSettings.tsx +246 -0
  153. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GeneralSettings.tsx +93 -0
  154. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitInfo.tsx +261 -0
  155. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/GitSettings.tsx +391 -0
  156. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/LogsSettings.tsx +133 -0
  157. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectNotFound.tsx +95 -0
  158. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ProjectsBottomNavigation.tsx +62 -0
  159. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/ResourceSettings.tsx +333 -0
  160. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingSection.tsx +66 -0
  161. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SettingsNavigation.tsx +27 -0
  162. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/SleepModeSettings.tsx +134 -0
  163. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProductionUrl.tsx +25 -0
  164. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectIdentity.tsx +159 -0
  165. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/ProjectInfo.tsx +58 -0
  166. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/SkeletonLoader.tsx +170 -0
  167. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/StatsCards.tsx +33 -0
  168. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TopPaths.tsx +56 -0
  169. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/TrafficChart.tsx +157 -0
  170. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/general/index.ts +14 -0
  171. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/LogsActions.tsx +52 -0
  172. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/ServerLogs.tsx +249 -0
  173. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/TerminalLogs.tsx +682 -0
  174. package/apps/dashboard/src/app/(dashboard)/projects/[id]/components/logs/logs.css +127 -0
  175. package/apps/dashboard/src/app/(dashboard)/projects/components/DeploymentCard.tsx +73 -0
  176. package/apps/dashboard/src/app/(dashboard)/projects/components/ProjectCard.tsx +330 -0
  177. package/apps/dashboard/src/app/(dashboard)/projects/page.tsx +326 -4
  178. package/apps/dashboard/src/app/(dashboard)/providers.tsx +23 -0
  179. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/components-tab.tsx +329 -0
  180. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/overview-tab.tsx +229 -0
  181. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/_components/terminal-tab.tsx +38 -0
  182. package/apps/dashboard/src/app/(dashboard)/servers/[serverId]/page.tsx +437 -0
  183. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/checking-state.tsx +15 -0
  184. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/choose-mode.tsx +54 -0
  185. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/component-row.tsx +65 -0
  186. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/error-banner.tsx +13 -0
  187. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/installing-panel.tsx +227 -0
  188. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/results-panel.tsx +90 -0
  189. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/setup-header.tsx +56 -0
  190. package/apps/dashboard/src/app/(dashboard)/servers/new/_components/types.ts +13 -0
  191. package/apps/dashboard/src/app/(dashboard)/servers/new/page.tsx +666 -0
  192. package/apps/dashboard/src/app/(dashboard)/servers/page.tsx +283 -0
  193. package/apps/dashboard/src/app/(dashboard)/settings/_components/BuildPreferences.tsx +110 -0
  194. package/apps/dashboard/src/app/(dashboard)/settings/_components/CloudConnection.tsx +147 -0
  195. package/apps/dashboard/src/app/(dashboard)/settings/_components/InstanceInfo.tsx +54 -0
  196. package/apps/dashboard/src/app/(dashboard)/settings/_components/ServerConnection.tsx +407 -0
  197. package/apps/dashboard/src/app/(dashboard)/settings/_components/SettingsSection.tsx +32 -0
  198. package/apps/dashboard/src/app/(dashboard)/settings/page.tsx +62 -3
  199. package/apps/dashboard/src/app/auth/callback/close/page.tsx +23 -0
  200. package/apps/dashboard/src/app/auth/callback/install/page.tsx +40 -0
  201. package/apps/dashboard/src/app/authorize/page.tsx +137 -0
  202. package/apps/dashboard/src/app/globals.css +57 -3
  203. package/apps/dashboard/src/app/layout.tsx +43 -3
  204. package/apps/dashboard/src/components/auth-shell.tsx +66 -0
  205. package/apps/dashboard/src/components/deployments/types.ts +44 -0
  206. package/apps/dashboard/src/components/global-deployments/index.ts +17 -0
  207. package/apps/dashboard/src/components/i18n-provider.tsx +100 -0
  208. package/apps/dashboard/src/components/import-project/BuildSettings.tsx +376 -0
  209. package/apps/dashboard/src/components/import-project/BuildSkeleton.tsx +161 -0
  210. package/apps/dashboard/src/components/import-project/BuildTerminal.tsx +358 -0
  211. package/apps/dashboard/src/components/import-project/ComposeServices.tsx +455 -0
  212. package/apps/dashboard/src/components/import-project/DeploymentProcessing.tsx +510 -0
  213. package/apps/dashboard/src/components/import-project/DockerSettings.tsx +64 -0
  214. package/apps/dashboard/src/components/import-project/EnvironmentVariables.tsx +481 -0
  215. package/apps/dashboard/src/components/import-project/Frameworks.tsx +90 -0
  216. package/apps/dashboard/src/components/import-project/ProjectSettings.tsx +160 -0
  217. package/apps/dashboard/src/components/import-project/types.ts +82 -0
  218. package/apps/dashboard/src/components/integrations/GithubPermissionModal.tsx +173 -0
  219. package/apps/dashboard/src/components/language-switcher.tsx +36 -0
  220. package/apps/dashboard/src/components/logo.tsx +13 -0
  221. package/apps/dashboard/src/components/network-error-handler.tsx +27 -0
  222. package/apps/dashboard/src/components/oauth-buttons.tsx +81 -0
  223. package/apps/dashboard/src/components/overview/ActivityChart.tsx +247 -0
  224. package/apps/dashboard/src/components/overview/ApiRequestsCard.tsx +111 -0
  225. package/apps/dashboard/src/components/overview/CreditsCard.tsx +137 -0
  226. package/apps/dashboard/src/components/overview/DeploymentsChart.tsx +195 -0
  227. package/apps/dashboard/src/components/overview/EmptyState.tsx +126 -0
  228. package/apps/dashboard/src/components/overview/LoadingSkeleton.tsx +92 -0
  229. package/apps/dashboard/src/components/overview/OverviewHeader.tsx +74 -0
  230. package/apps/dashboard/src/components/overview/OverviewHeroChart.tsx +344 -0
  231. package/apps/dashboard/src/components/overview/ProjectsCard.tsx +134 -0
  232. package/apps/dashboard/src/components/overview/QuickLinks.tsx +119 -0
  233. package/apps/dashboard/src/components/overview/SandboxesCard.tsx +150 -0
  234. package/apps/dashboard/src/components/overview/StatsGrid.tsx +166 -0
  235. package/apps/dashboard/src/components/overview/TokenUsageChart.tsx +206 -0
  236. package/apps/dashboard/src/components/overview/UsageStats.tsx +79 -0
  237. package/apps/dashboard/src/components/overview/index.ts +30 -0
  238. package/apps/dashboard/src/components/overview/types.ts +116 -0
  239. package/apps/dashboard/src/components/page-header.tsx +25 -0
  240. package/apps/dashboard/src/components/project-settings/ServerSideSwitch.jsx +60 -0
  241. package/apps/dashboard/src/components/shared/AlertBox.tsx +39 -0
  242. package/apps/dashboard/src/components/shared/CTASection.tsx +45 -0
  243. package/apps/dashboard/src/components/shared/ErrorState.tsx +176 -0
  244. package/apps/dashboard/src/components/shared/FeatureCard.tsx +20 -0
  245. package/apps/dashboard/src/components/shared/MDXComponents.tsx +24 -0
  246. package/apps/dashboard/src/components/shared/MachineSettingsModal.tsx +286 -0
  247. package/apps/dashboard/src/components/shared/Modal.tsx +39 -0
  248. package/apps/dashboard/src/components/shared/OTPInput.tsx +122 -0
  249. package/apps/dashboard/src/components/shared/PageHero.tsx +21 -0
  250. package/apps/dashboard/src/components/shared/PlatformFeatureCard.tsx +27 -0
  251. package/apps/dashboard/src/components/shared/StatCard.tsx +14 -0
  252. package/apps/dashboard/src/components/shared/ValueCard.tsx +20 -0
  253. package/apps/dashboard/src/components/shared/index.ts +8 -0
  254. package/apps/dashboard/src/components/sidebar.tsx +282 -0
  255. package/apps/dashboard/src/components/theme-provider.tsx +96 -0
  256. package/apps/dashboard/src/components/toast.tsx +106 -0
  257. package/apps/dashboard/src/components/ui/CustomCursor.tsx +107 -0
  258. package/apps/dashboard/src/components/ui/CustomSelect.tsx +126 -0
  259. package/apps/dashboard/src/components/ui/DropdownMenu.tsx +174 -0
  260. package/apps/dashboard/src/components/ui/FileIcon.jsx +59 -0
  261. package/apps/dashboard/src/components/ui/IconPickerModal.tsx +273 -0
  262. package/apps/dashboard/src/components/ui/InfoBanner.jsx +39 -0
  263. package/apps/dashboard/src/components/ui/Logo.tsx +14 -0
  264. package/apps/dashboard/src/components/ui/Modal.tsx +117 -0
  265. package/apps/dashboard/src/components/ui/PageContainer.tsx +12 -0
  266. package/apps/dashboard/src/components/ui/SectionContainer.jsx +7 -0
  267. package/apps/dashboard/src/components/ui/SlidingToggle.tsx +128 -0
  268. package/apps/dashboard/src/components/ui/Toast.tsx +29 -0
  269. package/apps/dashboard/src/components/ui/button.tsx +58 -0
  270. package/apps/dashboard/src/components/ui/card.tsx +60 -0
  271. package/apps/dashboard/src/components/ui/input.tsx +20 -0
  272. package/apps/dashboard/src/components/ui/label.tsx +19 -0
  273. package/apps/dashboard/src/components/ui/select.tsx +10 -0
  274. package/apps/dashboard/src/components/ui/textarea.tsx +9 -0
  275. package/apps/dashboard/src/constants/lang-colors.ts +25 -0
  276. package/apps/dashboard/src/constants/mock.ts +38 -0
  277. package/apps/dashboard/src/context/AuthContext.tsx +91 -0
  278. package/apps/dashboard/src/context/CloudContext.tsx +275 -0
  279. package/apps/dashboard/src/context/DeploymentContext.tsx +71 -0
  280. package/apps/dashboard/src/context/GitHubContext.tsx +288 -0
  281. package/apps/dashboard/src/context/ModalContext.tsx +300 -0
  282. package/apps/dashboard/src/context/NetworkContext.tsx +32 -0
  283. package/apps/dashboard/src/context/ProjectSettingsContext.tsx +727 -0
  284. package/apps/dashboard/src/context/ToastContext.tsx +129 -0
  285. package/apps/dashboard/src/context/deployment/index.ts +3 -0
  286. package/apps/dashboard/src/context/deployment/types.ts +183 -0
  287. package/apps/dashboard/src/context/deployment/useDeploymentBuild.ts +547 -0
  288. package/apps/dashboard/src/context/deployment/useDeploymentConfig.ts +176 -0
  289. package/apps/dashboard/src/hooks/useBuildConnection.ts +334 -0
  290. package/apps/dashboard/src/hooks/useMonitorStream.ts +146 -0
  291. package/apps/dashboard/src/hooks/useProjectData.ts +110 -0
  292. package/apps/dashboard/src/hooks/useSSEConnection.ts +465 -0
  293. package/apps/dashboard/src/hooks/useSSEStream.ts +309 -0
  294. package/apps/dashboard/src/hooks/useSessions.ts +104 -0
  295. package/apps/dashboard/src/hooks/useSetupStream.ts +223 -0
  296. package/apps/dashboard/src/i18n/dictionaries/ar.json +218 -0
  297. package/apps/dashboard/src/i18n/dictionaries/en.json +218 -0
  298. package/apps/dashboard/src/i18n/index.ts +16 -0
  299. package/apps/dashboard/src/lib/api/ai.ts +22 -0
  300. package/apps/dashboard/src/lib/api/auth.ts +13 -0
  301. package/apps/dashboard/src/lib/api/client.ts +199 -0
  302. package/apps/dashboard/src/lib/api/cloud.ts +15 -0
  303. package/apps/dashboard/src/lib/api/deploy.ts +58 -0
  304. package/apps/dashboard/src/lib/api/domains.ts +13 -0
  305. package/apps/dashboard/src/lib/api/endpoints.ts +129 -0
  306. package/apps/dashboard/src/lib/api/github.ts +31 -0
  307. package/apps/dashboard/src/lib/api/icons.ts +12 -0
  308. package/apps/dashboard/src/lib/api/index.ts +41 -0
  309. package/apps/dashboard/src/lib/api/projects.ts +153 -0
  310. package/apps/dashboard/src/lib/api/sandbox.ts +14 -0
  311. package/apps/dashboard/src/lib/api/settings.ts +21 -0
  312. package/apps/dashboard/src/lib/api/system.ts +159 -0
  313. package/apps/dashboard/src/lib/auth-client.ts +54 -0
  314. package/apps/dashboard/src/lib/country.ts +25 -0
  315. package/apps/dashboard/src/lib/server/api.ts +140 -0
  316. package/apps/dashboard/src/lib/server/session.ts +103 -0
  317. package/apps/dashboard/src/lib/sseClient.ts +241 -0
  318. package/apps/dashboard/src/lib/sseMessageProcessors.ts +323 -0
  319. package/apps/dashboard/src/lib/utils.ts +6 -0
  320. package/apps/dashboard/src/proxy.ts +46 -0
  321. package/apps/dashboard/src/styles/Toast.module.css +92 -0
  322. package/apps/dashboard/src/styles/fonts.css +93 -0
  323. package/apps/dashboard/src/styles/theme.css +336 -0
  324. package/apps/dashboard/src/types/research.ts +42 -0
  325. package/apps/dashboard/src/utils/SSEParser.js +150 -0
  326. package/apps/dashboard/src/utils/authWindow.ts +143 -0
  327. package/apps/dashboard/src/utils/codeTheme.ts +127 -0
  328. package/apps/dashboard/src/utils/colors.json +2810 -0
  329. package/apps/dashboard/src/utils/date.ts +121 -0
  330. package/apps/dashboard/src/utils/deployment.ts +128 -0
  331. package/apps/dashboard/src/utils/deploymentPhaseDetector.ts +232 -0
  332. package/apps/dashboard/src/utils/extToLang.js +103 -0
  333. package/apps/dashboard/src/utils/github.ts +62 -0
  334. package/apps/dashboard/src/utils/icons.js +46 -0
  335. package/apps/dashboard/src/utils/repoSlug.ts +110 -0
  336. package/apps/dashboard/src/utils/research-api.ts +163 -0
  337. package/apps/dashboard/src/utils/suggestions.ts +84 -0
  338. package/apps/dashboard/src/utils/theme.js +1 -0
  339. package/apps/dashboard/src/utils/ui-helpers.tsx +30 -0
  340. package/apps/dashboard/src/utils/upload.js +12 -0
  341. package/apps/dashboard/tsconfig.json +27 -5
  342. package/apps/desktop/forge.config.json +36 -0
  343. package/apps/desktop/package.json +26 -0
  344. package/apps/desktop/scripts/dev.mjs +58 -0
  345. package/apps/desktop/src/main/index.ts +675 -0
  346. package/apps/desktop/src/main/types/desktop.d.ts +33 -0
  347. package/apps/desktop/src/preload/index.ts +88 -0
  348. package/apps/desktop/src/renderer/index.html +462 -0
  349. package/apps/desktop/src/renderer/onboarding.js +511 -0
  350. package/apps/desktop/src/renderer/styles.css +1139 -0
  351. package/apps/desktop/tsconfig.json +17 -0
  352. package/apps/web/.source/browser.ts +13 -0
  353. package/apps/web/.source/dynamic.ts +8 -0
  354. package/apps/web/.source/server.ts +22 -0
  355. package/apps/web/.source/source.config.mjs +20 -0
  356. package/apps/web/Dockerfile +4 -6
  357. package/apps/web/content/blog/how-ai-builds-work.mdx +55 -0
  358. package/apps/web/content/blog/introducing-openship.mdx +46 -0
  359. package/apps/web/content/blog/self-hosting-cost-breakdown.mdx +59 -0
  360. package/apps/web/content/docs/_meta.json +14 -0
  361. package/apps/web/content/docs/api.mdx +98 -0
  362. package/apps/web/content/docs/cli.mdx +80 -0
  363. package/apps/web/content/docs/first-deployment.mdx +56 -0
  364. package/apps/web/content/docs/index.mdx +27 -0
  365. package/apps/web/content/docs/installation.mdx +65 -0
  366. package/apps/web/content/docs/quickstart.mdx +45 -0
  367. package/apps/web/next-env.d.ts +6 -0
  368. package/apps/web/next.config.mjs +16 -2
  369. package/apps/web/package.json +19 -12
  370. package/apps/web/postcss.config.mjs +5 -0
  371. package/apps/web/public/android-chrome-192x192.png +0 -0
  372. package/apps/web/public/android-chrome-512x512.png +0 -0
  373. package/apps/web/public/apple-touch-icon.png +0 -0
  374. package/apps/web/public/favicon-16x16.png +0 -0
  375. package/apps/web/public/favicon-32x32.png +0 -0
  376. package/apps/web/public/favicon.ico +0 -0
  377. package/apps/web/public/site.webmanifest +1 -0
  378. package/apps/web/source.config.ts +17 -0
  379. package/apps/web/src/app/(marketing)/layout.tsx +7 -22
  380. package/apps/web/src/app/blog/[...slug]/page.tsx +247 -0
  381. package/apps/web/src/app/blog/blog.css +575 -0
  382. package/apps/web/src/app/blog/layout.tsx +50 -0
  383. package/apps/web/src/app/blog/page.tsx +235 -0
  384. package/apps/web/src/app/docs/[[...slug]]/page.tsx +67 -0
  385. package/apps/web/src/app/docs/layout.tsx +62 -0
  386. package/apps/web/src/app/docs/toc-theme.css +71 -0
  387. package/apps/web/src/app/download/page.tsx +396 -0
  388. package/apps/web/src/app/globals.css +20 -3
  389. package/apps/web/src/app/layout.tsx +57 -3
  390. package/apps/web/src/app/page.tsx +47 -6
  391. package/apps/web/src/app/robots.ts +15 -0
  392. package/apps/web/src/app/sitemap.ts +35 -0
  393. package/apps/web/src/components/blog/share-sidebar.tsx +81 -0
  394. package/apps/web/src/components/blog/writer-sidebar.tsx +81 -0
  395. package/apps/web/src/components/landing/ai-native.tsx +169 -0
  396. package/apps/web/src/components/landing/backups.tsx +139 -0
  397. package/apps/web/src/components/landing/cdn.tsx +109 -0
  398. package/apps/web/src/components/landing/coming-soon.tsx +180 -0
  399. package/apps/web/src/components/landing/dark-section.tsx +166 -0
  400. package/apps/web/src/components/landing/dashboard.tsx +407 -0
  401. package/apps/web/src/components/landing/developer-experience.tsx +224 -0
  402. package/apps/web/src/components/landing/dns-domains.tsx +146 -0
  403. package/apps/web/src/components/landing/download-button.tsx +151 -0
  404. package/apps/web/src/components/landing/features/ai-visual.tsx +48 -0
  405. package/apps/web/src/components/landing/features/cloud-visual.tsx +44 -0
  406. package/apps/web/src/components/landing/features/git-visual.tsx +61 -0
  407. package/apps/web/src/components/landing/features/index.tsx +642 -0
  408. package/apps/web/src/components/landing/features/infra-visual.tsx +69 -0
  409. package/apps/web/src/components/landing/features/rollback-visual.tsx +42 -0
  410. package/apps/web/src/components/landing/features/ssl-visual.tsx +41 -0
  411. package/apps/web/src/components/landing/features/stacks-visual.tsx +54 -0
  412. package/apps/web/src/components/landing/final-cta.tsx +116 -0
  413. package/apps/web/src/components/landing/footer.tsx +145 -0
  414. package/apps/web/src/components/landing/hero.tsx +110 -0
  415. package/apps/web/src/components/landing/how-it-works.tsx +210 -0
  416. package/apps/web/src/components/landing/index.ts +21 -0
  417. package/apps/web/src/components/landing/mail-server.tsx +122 -0
  418. package/apps/web/src/components/landing/navbar.tsx +199 -0
  419. package/apps/web/src/components/landing/no-lockin.tsx +185 -0
  420. package/apps/web/src/components/landing/open-source-cta.tsx +151 -0
  421. package/apps/web/src/components/landing/portability.tsx +190 -0
  422. package/apps/web/src/components/landing/pricing.tsx +263 -0
  423. package/apps/web/src/components/landing/scaling.tsx +209 -0
  424. package/apps/web/src/components/landing/why-openship.tsx +291 -0
  425. package/apps/web/src/hooks/use-gsap-scroll.ts +158 -0
  426. package/apps/web/src/hooks/use-platform.ts +86 -0
  427. package/apps/web/src/lib/source.ts +12 -0
  428. package/apps/web/src/styles/fonts.css +84 -0
  429. package/apps/web/src/styles/landing.css +951 -0
  430. package/apps/web/src/styles/theme.css +227 -0
  431. package/apps/web/tsconfig.json +8 -3
  432. package/bun.lock +3260 -0
  433. package/docker-compose.yml +3 -0
  434. package/docs/screenshots/.gitkeep +0 -0
  435. package/docs/screenshots/screen.png +0 -0
  436. package/openship.code-workspace +7 -0
  437. package/package.json +23 -9
  438. package/packages/adapters/docs/ARCHITECTURE.md +160 -0
  439. package/packages/adapters/docs/BUILD-PIPELINE.md +171 -0
  440. package/packages/adapters/docs/CLOUD.md +239 -0
  441. package/packages/adapters/docs/EXECUTOR.md +174 -0
  442. package/packages/adapters/docs/LOG-STREAMING.md +175 -0
  443. package/packages/adapters/docs/SYSTEM.md +191 -0
  444. package/packages/adapters/package.json +14 -9
  445. package/packages/adapters/src/index.ts +144 -4
  446. package/packages/adapters/src/infra/cloud.ts +42 -0
  447. package/packages/adapters/src/infra/index.ts +9 -0
  448. package/packages/adapters/src/infra/noop.ts +27 -0
  449. package/packages/adapters/src/infra/traefik.ts +297 -0
  450. package/packages/adapters/src/infra/types.ts +36 -0
  451. package/packages/adapters/src/platform.ts +255 -0
  452. package/packages/adapters/src/runtime/bare.ts +567 -0
  453. package/packages/adapters/src/runtime/build-pipeline.ts +237 -0
  454. package/packages/adapters/src/runtime/cloud.ts +791 -0
  455. package/packages/adapters/src/runtime/deploy-pipeline.ts +146 -0
  456. package/packages/adapters/src/runtime/docker.ts +443 -0
  457. package/packages/adapters/src/runtime/index.ts +69 -0
  458. package/packages/adapters/src/runtime/local-build.ts +112 -0
  459. package/packages/adapters/src/runtime/transfer.ts +82 -0
  460. package/packages/adapters/src/runtime/types.ts +138 -0
  461. package/packages/adapters/src/system/catalog.ts +188 -0
  462. package/packages/adapters/src/system/checks.ts +228 -0
  463. package/packages/adapters/src/system/components.ts +45 -0
  464. package/packages/adapters/src/system/debug.ts +18 -0
  465. package/packages/adapters/src/system/environment.ts +168 -0
  466. package/packages/adapters/src/system/errors.ts +34 -0
  467. package/packages/adapters/src/system/executor.ts +600 -0
  468. package/packages/adapters/src/system/index.ts +58 -0
  469. package/packages/adapters/src/system/installer.ts +310 -0
  470. package/packages/adapters/src/system/setup.ts +442 -0
  471. package/packages/adapters/src/system/state.ts +96 -0
  472. package/packages/adapters/src/system/types.ts +116 -0
  473. package/packages/adapters/src/toolchain/catalog.ts +439 -0
  474. package/packages/adapters/src/toolchain/checks.ts +181 -0
  475. package/packages/adapters/src/toolchain/index.ts +38 -0
  476. package/packages/adapters/src/toolchain/installer.ts +189 -0
  477. package/packages/adapters/src/toolchain/types.ts +84 -0
  478. package/packages/adapters/src/types.ts +277 -0
  479. package/packages/adapters/tsconfig.json +3 -1
  480. package/packages/core/package.json +9 -9
  481. package/packages/core/src/constants.ts +44 -1
  482. package/packages/core/src/index.ts +2 -0
  483. package/packages/core/src/stacks.ts +778 -0
  484. package/packages/core/src/system.ts +111 -0
  485. package/packages/core/src/types.ts +22 -1
  486. package/packages/core/src/utils.ts +8 -0
  487. package/packages/core/tsconfig.json +3 -1
  488. package/packages/db/drizzle/0000_init.sql +231 -0
  489. package/packages/db/drizzle/0001_add_server_name.sql +1 -0
  490. package/packages/db/drizzle/meta/_journal.json +20 -0
  491. package/packages/db/drizzle.config.ts +10 -0
  492. package/packages/db/package.json +26 -14
  493. package/packages/db/src/client.ts +119 -0
  494. package/packages/db/src/index.ts +57 -8
  495. package/packages/db/src/repos/account.repo.ts +92 -0
  496. package/packages/db/src/repos/deployment.repo.ts +168 -0
  497. package/packages/db/src/repos/domain.repo.ts +102 -0
  498. package/packages/db/src/repos/git-installation.repo.ts +95 -0
  499. package/packages/db/src/repos/index.ts +43 -0
  500. package/packages/db/src/repos/instance-settings.repo.ts +43 -0
  501. package/packages/db/src/repos/project.repo.ts +159 -0
  502. package/packages/db/src/repos/session.repo.ts +82 -0
  503. package/packages/db/src/repos/settings.repo.ts +51 -0
  504. package/packages/db/src/repos/user.repo.ts +94 -0
  505. package/packages/db/src/schema/auth.ts +56 -0
  506. package/packages/db/src/schema/deployment.ts +87 -0
  507. package/packages/db/src/schema/domain.ts +46 -0
  508. package/packages/db/src/schema/github.ts +24 -0
  509. package/packages/db/src/schema/index.ts +6 -0
  510. package/packages/db/src/schema/project.ts +117 -0
  511. package/packages/db/src/schema/settings.ts +103 -0
  512. package/packages/db/tsconfig.json +3 -1
  513. package/packages/ui/package.json +17 -17
  514. package/packages/ui/src/components/status-dot.tsx +1 -1
  515. package/packages/ui/tsconfig.json +7 -2
  516. package/pnpm-workspace.yaml +0 -1
  517. package/{tooling/tsconfig/base.json → tsconfig.base.json} +0 -1
  518. package/turbo.json +4 -0
  519. package/apps/api/src/modules/auth/auth.controller.ts +0 -26
  520. package/apps/api/src/modules/auth/auth.schema.ts +0 -12
  521. package/apps/api/src/modules/auth/auth.service.ts +0 -23
  522. package/apps/dashboard/src/app/page.tsx +0 -6
  523. package/apps/web/src/app/(marketing)/docs/page.tsx +0 -10
  524. package/packages/adapters/src/base-adapter.ts +0 -49
  525. package/packages/adapters/src/docker-adapter.ts +0 -43
  526. package/packages/adapters/src/oblien-adapter.ts +0 -46
  527. package/packages/adapters/src/registry.ts +0 -22
  528. package/packages/db/prisma/schema.prisma +0 -160
  529. package/tooling/tsconfig/nextjs.json +0 -10
  530. package/tooling/tsconfig/node.json +0 -10
  531. package/tooling/tsconfig/package.json +0 -7
@@ -0,0 +1,218 @@
1
+ {
2
+ "brand": "openship",
3
+ "auth": {
4
+ "login": {
5
+ "title": "مرحبًا بعودتك",
6
+ "subtitle": "سجّل الدخول إلى حسابك للمتابعة.",
7
+ "emailLabel": "البريد الإلكتروني",
8
+ "emailPlaceholder": "you@example.com",
9
+ "passwordLabel": "كلمة المرور",
10
+ "passwordPlaceholder": "••••••••",
11
+ "forgot": "نسيت؟",
12
+ "submit": "تسجيل الدخول",
13
+ "submitting": "جارٍ تسجيل الدخول…",
14
+ "noAccount": "ليس لديك حساب؟",
15
+ "createOne": "إنشاء حساب"
16
+ },
17
+ "register": {
18
+ "title": "أنشئ حسابك",
19
+ "subtitle": "ابدأ مع Openship في ثوانٍ.",
20
+ "nameLabel": "الاسم",
21
+ "namePlaceholder": "اسمك",
22
+ "emailLabel": "البريد الإلكتروني",
23
+ "emailPlaceholder": "you@example.com",
24
+ "passwordLabel": "كلمة المرور",
25
+ "passwordPlaceholder": "٨ أحرف على الأقل",
26
+ "submit": "إنشاء حساب",
27
+ "submitting": "جارٍ الإنشاء…",
28
+ "hasAccount": "لديك حساب بالفعل؟",
29
+ "signIn": "تسجيل الدخول"
30
+ },
31
+ "forgotPassword": {
32
+ "title": "إعادة تعيين كلمة المرور",
33
+ "subtitle": "أدخل بريدك الإلكتروني وسنرسل لك رابط إعادة التعيين.",
34
+ "emailLabel": "البريد الإلكتروني",
35
+ "emailPlaceholder": "you@example.com",
36
+ "submit": "إرسال رابط إعادة التعيين",
37
+ "submitting": "جارٍ الإرسال…",
38
+ "backToSignIn": "العودة لتسجيل الدخول",
39
+ "sentTitle": "تحقق من بريدك",
40
+ "sentDescription": "أرسلنا رابط إعادة تعيين كلمة المرور إلى {email}. قد يستغرق الأمر دقيقة.",
41
+ "tryDifferentEmail": "جرّب بريدًا مختلفًا"
42
+ },
43
+ "resetPassword": {
44
+ "title": "تعيين كلمة مرور جديدة",
45
+ "subtitle": "اختر كلمة مرور قوية لحسابك.",
46
+ "passwordLabel": "كلمة المرور الجديدة",
47
+ "passwordPlaceholder": "٨ أحرف على الأقل",
48
+ "confirmLabel": "تأكيد كلمة المرور",
49
+ "confirmPlaceholder": "أعد إدخال كلمة المرور",
50
+ "submit": "إعادة تعيين كلمة المرور",
51
+ "submitting": "جارٍ إعادة التعيين…",
52
+ "backToSignIn": "العودة لتسجيل الدخول",
53
+ "doneTitle": "تم إعادة تعيين كلمة المرور",
54
+ "doneDescription": "تم تحديث كلمة المرور بنجاح.",
55
+ "doneAction": "تسجيل الدخول",
56
+ "noTokenError": "لم يتم العثور على رمز إعادة التعيين. يرجى {link}.",
57
+ "noTokenLink": "طلب رابط جديد"
58
+ },
59
+ "verifyEmail": {
60
+ "verifyingTitle": "جارٍ التحقق من بريدك الإلكتروني…",
61
+ "verifyingSubtitle": "لحظة واحدة.",
62
+ "verifiedTitle": "تم التحقق من البريد الإلكتروني",
63
+ "verifiedDescription": "تم التحقق من بريدك الإلكتروني. يمكنك الآن تسجيل الدخول.",
64
+ "verifiedAction": "متابعة لتسجيل الدخول",
65
+ "errorTitle": "فشل التحقق",
66
+ "errorDescription": "قد يكون الرابط منتهي الصلاحية أو غير صالح.",
67
+ "resendEmail": "إعادة إرسال البريد",
68
+ "signIn": "تسجيل الدخول",
69
+ "pendingTitle": "تحقق من بريدك الإلكتروني",
70
+ "pendingSentTo": "أرسلنا رابط التحقق إلى {email}. تحقق من بريدك وانقر على الرابط للمتابعة.",
71
+ "pendingGeneric": "تحقق من بريدك الوارد للعثور على رابط التحقق.",
72
+ "resendVerification": "إعادة إرسال بريد التحقق",
73
+ "backToSignIn": "العودة لتسجيل الدخول"
74
+ },
75
+ "oauth": {
76
+ "or": "أو",
77
+ "github": "المتابعة مع GitHub",
78
+ "google": "المتابعة مع Google"
79
+ },
80
+ "errors": {
81
+ "invalidCredentials": "بريد إلكتروني أو كلمة مرور غير صحيحة.",
82
+ "serverUnreachable": "تعذر الوصول إلى الخادم. هل واجهة البرمجة تعمل؟",
83
+ "generic": "حدث خطأ ما. يرجى المحاولة مرة أخرى.",
84
+ "oauthFailed": "فشل تسجيل الدخول عبر OAuth. يرجى المحاولة مرة أخرى.",
85
+ "passwordMin": "يجب أن تكون كلمة المرور ٨ أحرف على الأقل.",
86
+ "passwordMismatch": "كلمتا المرور غير متطابقتين.",
87
+ "invalidToken": "رمز إعادة التعيين غير صالح أو مفقود. يرجى طلب رابط جديد.",
88
+ "resetFailed": "تعذر إعادة تعيين كلمة المرور.",
89
+ "createFailed": "تعذر إنشاء الحساب.",
90
+ "verificationFailed": "فشل التحقق.",
91
+ "verificationExpired": "فشل التحقق. قد يكون الرابط منتهي الصلاحية.",
92
+ "resendFailed": "فشل إعادة الإرسال. يرجى المحاولة مرة أخرى.",
93
+ "verificationSent": "تم إرسال بريد التحقق!"
94
+ },
95
+ "back": "رجوع",
96
+ "toggleTheme": "تبديل السمة",
97
+ "showPassword": "إظهار كلمة المرور",
98
+ "hidePassword": "إخفاء كلمة المرور"
99
+ },
100
+ "dashboard": {
101
+ "home": {
102
+ "goodMorning": "صباح الخير",
103
+ "goodAfternoon": "مساء الخير",
104
+ "goodEvening": "مساء الخير",
105
+ "subtitle": "إليك ما يحدث في مشاريعك",
106
+ "statsProjects": "المشاريع",
107
+ "statsDeployments": "عمليات النشر",
108
+ "statsSuccessful": "الناجحة",
109
+ "statsFailed": "الفاشلة",
110
+ "recentProjects": "المشاريع الأخيرة",
111
+ "yourLatestActivity": "آخر نشاطاتك",
112
+ "viewAll": "عرض الكل",
113
+ "noProjectsYet": "لا توجد مشاريع بعد",
114
+ "createFirstProject": "أنشئ مشروعك الأول",
115
+ "justNow": "الآن",
116
+ "minutesAgo": "منذ {n} دقيقة",
117
+ "hoursAgo": "منذ {n} ساعة",
118
+ "daysAgo": "منذ {n} يوم",
119
+ "monthsAgo": "منذ {n} شهر",
120
+ "statusLive": "مباشر",
121
+ "statusPaused": "متوقف"
122
+ },
123
+ "nav": {
124
+ "home": "الرئيسية",
125
+ "new-project": "مشروع جديد",
126
+ "projects": "المشاريع",
127
+ "deployments": "عمليات النشر",
128
+ "domains": "النطاقات",
129
+ "monitoring": "المراقبة",
130
+ "servers": "الخوادم",
131
+ "settings": "الإعدادات",
132
+ "billing": "الفوترة",
133
+ "sections": {
134
+ "main": "الرئيسية",
135
+ "settings": "الإعدادات",
136
+ "infrastructure": "البنية التحتية",
137
+ "account": "الحساب"
138
+ }
139
+ },
140
+ "sidebar": {
141
+ "expand": "توسيع الشريط الجانبي",
142
+ "collapse": "طي الشريط الجانبي"
143
+ },
144
+ "user": {
145
+ "logout": "تسجيل الخروج",
146
+ "loggingOut": "جارٍ تسجيل الخروج…",
147
+ "profile": "الملف الشخصي",
148
+ "preferences": "التفضيلات"
149
+ },
150
+ "pages": {
151
+ "projects": {
152
+ "title": "المشاريع",
153
+ "description": "انشر وأدر تطبيقاتك بسهولة",
154
+ "createButton": "إنشاء مشروع",
155
+ "stats": {
156
+ "totalProjects": "إجمالي المشاريع",
157
+ "liveNow": "مباشر الآن",
158
+ "avgPerDay": "المعدل اليومي",
159
+ "successRate": "معدل النجاح"
160
+ },
161
+ "searchPlaceholder": "البحث في المشاريع...",
162
+ "pinnedProjects": "المشاريع المثبتة",
163
+ "otherProjects": "المشاريع الأخرى",
164
+ "noResultsFound": "لم يتم العثور على مشاريع مطابقة لـ \"{query}\"",
165
+ "emptyState": {
166
+ "title": "ابدأ مشروعك الأول",
167
+ "description": "استورد من مستودع Git، استخدم قالب، أو انشر من سطر الأوامر. ستظهر مشاريعك هنا.",
168
+ "createProject": "إنشاء مشروع",
169
+ "browseTemplates": "تصفح القوالب",
170
+ "zeroConfig": "نشر بدون إعداد",
171
+ "instant": "فوري",
172
+ "instantDesc": "انشر في ثوانٍ",
173
+ "global": "عالمي",
174
+ "globalDesc": "100+ منطقة حافة",
175
+ "previews": "معاينات",
176
+ "previewsDesc": "رابط لكل فرع",
177
+ "rollbacks": "التراجع",
178
+ "rollbacksDesc": "استرجاع بنقرة واحدة",
179
+ "commandPalette": "أو اضغط {key} لفتح لوحة الأوامر"
180
+ }
181
+ },
182
+ "deployments": { "title": "عمليات النشر", "description": "عرض وإدارة سجل النشر." },
183
+ "domains": { "title": "النطاقات", "description": "إدارة النطاقات المخصصة وسجلات DNS." },
184
+ "monitoring": { "title": "المراقبة", "description": "السجلات والمقاييس وفحوصات الصحة لخدماتك." },
185
+ "servers": { "title": "الخوادم", "description": "إدارة خوادم النشر والبنية التحتية." },
186
+ "settings": { "title": "الإعدادات", "description": "إعدادات الحساب والفريق والمنصة." },
187
+ "billing": { "title": "الفوترة", "description": "إدارة اشتراكك واستخدامك وطرق الدفع." }
188
+ },
189
+ "quickLinks": {
190
+ "title": "الإجراءات السريعة",
191
+ "subtitle": "انتقل إلى المهام الشائعة",
192
+ "deployProject": {
193
+ "title": "نشر مشروع",
194
+ "description": "استيراد من Git"
195
+ },
196
+ "projects": {
197
+ "title": "المشاريع",
198
+ "description": "جميع المشاريع"
199
+ },
200
+ "deployments": {
201
+ "title": "عمليات النشر",
202
+ "description": "سجل البناء"
203
+ },
204
+ "settings": {
205
+ "title": "الإعدادات",
206
+ "description": "إدارة الوصول"
207
+ },
208
+ "domains": {
209
+ "title": "النطاقات",
210
+ "description": "النطاقات المخصصة"
211
+ },
212
+ "billing": {
213
+ "title": "الفوترة",
214
+ "description": "الاستخدام والخطط"
215
+ }
216
+ }
217
+ }
218
+ }
@@ -0,0 +1,218 @@
1
+ {
2
+ "brand": "OpenShip",
3
+ "auth": {
4
+ "login": {
5
+ "title": "Welcome back",
6
+ "subtitle": "Sign in to your account to continue.",
7
+ "emailLabel": "Email",
8
+ "emailPlaceholder": "you@example.com",
9
+ "passwordLabel": "Password",
10
+ "passwordPlaceholder": "••••••••",
11
+ "forgot": "Forgot?",
12
+ "submit": "Sign in",
13
+ "submitting": "Signing in…",
14
+ "noAccount": "No account?",
15
+ "createOne": "Create one"
16
+ },
17
+ "register": {
18
+ "title": "Create your account",
19
+ "subtitle": "Get started with Openship in seconds.",
20
+ "nameLabel": "Name",
21
+ "namePlaceholder": "Your name",
22
+ "emailLabel": "Email",
23
+ "emailPlaceholder": "you@example.com",
24
+ "passwordLabel": "Password",
25
+ "passwordPlaceholder": "Min. 8 characters",
26
+ "submit": "Create account",
27
+ "submitting": "Creating account…",
28
+ "hasAccount": "Already have an account?",
29
+ "signIn": "Sign in"
30
+ },
31
+ "forgotPassword": {
32
+ "title": "Reset your password",
33
+ "subtitle": "Enter your email and we'll send you a reset link.",
34
+ "emailLabel": "Email",
35
+ "emailPlaceholder": "you@example.com",
36
+ "submit": "Send reset link",
37
+ "submitting": "Sending…",
38
+ "backToSignIn": "Back to sign in",
39
+ "sentTitle": "Check your inbox",
40
+ "sentDescription": "We sent a password reset link to {email}. It may take a minute to arrive.",
41
+ "tryDifferentEmail": "Try a different email"
42
+ },
43
+ "resetPassword": {
44
+ "title": "Set a new password",
45
+ "subtitle": "Choose a strong password for your account.",
46
+ "passwordLabel": "New password",
47
+ "passwordPlaceholder": "Min. 8 characters",
48
+ "confirmLabel": "Confirm password",
49
+ "confirmPlaceholder": "Re-enter password",
50
+ "submit": "Reset password",
51
+ "submitting": "Resetting…",
52
+ "backToSignIn": "Back to sign in",
53
+ "doneTitle": "Password reset",
54
+ "doneDescription": "Your password has been updated successfully.",
55
+ "doneAction": "Sign in",
56
+ "noTokenError": "No reset token found. Please {link}.",
57
+ "noTokenLink": "request a new link"
58
+ },
59
+ "verifyEmail": {
60
+ "verifyingTitle": "Verifying your email…",
61
+ "verifyingSubtitle": "Just a moment.",
62
+ "verifiedTitle": "Email verified",
63
+ "verifiedDescription": "Your email has been verified. You can now sign in.",
64
+ "verifiedAction": "Continue to sign in",
65
+ "errorTitle": "Verification failed",
66
+ "errorDescription": "The link may have expired or is invalid.",
67
+ "resendEmail": "Resend email",
68
+ "signIn": "Sign in",
69
+ "pendingTitle": "Verify your email",
70
+ "pendingSentTo": "We sent a verification link to {email}. Check your inbox and click the link to continue.",
71
+ "pendingGeneric": "Check your inbox for a verification link.",
72
+ "resendVerification": "Resend verification email",
73
+ "backToSignIn": "Back to sign in"
74
+ },
75
+ "oauth": {
76
+ "or": "or",
77
+ "github": "Continue with GitHub",
78
+ "google": "Continue with Google"
79
+ },
80
+ "errors": {
81
+ "invalidCredentials": "Invalid email or password.",
82
+ "serverUnreachable": "Could not reach the server. Is the API running?",
83
+ "generic": "Something went wrong. Please try again.",
84
+ "oauthFailed": "OAuth sign-in failed. Please try again.",
85
+ "passwordMin": "Password must be at least 8 characters.",
86
+ "passwordMismatch": "Passwords do not match.",
87
+ "invalidToken": "Invalid or missing reset token. Please request a new link.",
88
+ "resetFailed": "Could not reset password.",
89
+ "createFailed": "Could not create account.",
90
+ "verificationFailed": "Verification failed.",
91
+ "verificationExpired": "Verification failed. The link may have expired.",
92
+ "resendFailed": "Failed to resend. Please try again.",
93
+ "verificationSent": "Verification email sent!"
94
+ },
95
+ "back": "Back",
96
+ "toggleTheme": "Toggle theme",
97
+ "showPassword": "Show password",
98
+ "hidePassword": "Hide password"
99
+ },
100
+ "dashboard": {
101
+ "home": {
102
+ "goodMorning": "Good morning",
103
+ "goodAfternoon": "Good afternoon",
104
+ "goodEvening": "Good evening",
105
+ "subtitle": "Here's what's happening across your projects",
106
+ "statsProjects": "Projects",
107
+ "statsDeployments": "Deployments",
108
+ "statsSuccessful": "Successful",
109
+ "statsFailed": "Failed",
110
+ "recentProjects": "Recent Projects",
111
+ "yourLatestActivity": "Your latest activity",
112
+ "viewAll": "View all",
113
+ "noProjectsYet": "No projects yet",
114
+ "createFirstProject": "Create your first project",
115
+ "justNow": "just now",
116
+ "minutesAgo": "{n}m ago",
117
+ "hoursAgo": "{n}h ago",
118
+ "daysAgo": "{n}d ago",
119
+ "monthsAgo": "{n}mo ago",
120
+ "statusLive": "Live",
121
+ "statusPaused": "Paused"
122
+ },
123
+ "nav": {
124
+ "home": "Home",
125
+ "new-project": "New Project",
126
+ "projects": "Projects",
127
+ "deployments": "Deployments",
128
+ "domains": "Domains",
129
+ "monitoring": "Monitoring",
130
+ "servers": "Servers",
131
+ "settings": "Settings",
132
+ "billing": "Billing",
133
+ "sections": {
134
+ "main": "Main",
135
+ "settings": "Settings",
136
+ "infrastructure": "Infrastructure",
137
+ "account": "Account"
138
+ }
139
+ },
140
+ "sidebar": {
141
+ "expand": "Expand sidebar",
142
+ "collapse": "Collapse sidebar"
143
+ },
144
+ "user": {
145
+ "logout": "Log out",
146
+ "loggingOut": "Logging out\u2026",
147
+ "profile": "Profile",
148
+ "preferences": "Preferences"
149
+ },
150
+ "pages": {
151
+ "projects": {
152
+ "title": "Projects",
153
+ "description": "Deploy and manage your applications with ease",
154
+ "createButton": "Create Project",
155
+ "stats": {
156
+ "totalProjects": "Total Projects",
157
+ "liveNow": "Live Now",
158
+ "avgPerDay": "Avg per Day",
159
+ "successRate": "Success Rate"
160
+ },
161
+ "searchPlaceholder": "Search projects...",
162
+ "pinnedProjects": "Pinned Projects",
163
+ "otherProjects": "Other Projects",
164
+ "noResultsFound": "No projects found matching \"{query}\"",
165
+ "emptyState": {
166
+ "title": "Start your first project",
167
+ "description": "Import a Git repository, use a template, or deploy from CLI. Your projects will appear here.",
168
+ "createProject": "Create Project",
169
+ "browseTemplates": "Browse Templates",
170
+ "zeroConfig": "Zero-config deployment",
171
+ "instant": "Instant",
172
+ "instantDesc": "Deploy in seconds",
173
+ "global": "Global",
174
+ "globalDesc": "100+ edge regions",
175
+ "previews": "Previews",
176
+ "previewsDesc": "URL per branch",
177
+ "rollbacks": "Rollbacks",
178
+ "rollbacksDesc": "One-click revert",
179
+ "commandPalette": "Or press {key} to open command palette"
180
+ }
181
+ },
182
+ "deployments": { "title": "Deployments", "description": "View and manage your deployment history." },
183
+ "domains": { "title": "Domains", "description": "Manage custom domains and DNS records." },
184
+ "monitoring": { "title": "Monitoring", "description": "Logs, metrics, and health checks for your services." },
185
+ "servers": { "title": "Servers", "description": "Manage your deployment servers and infrastructure." },
186
+ "settings": { "title": "Settings", "description": "Account, team, and platform settings." },
187
+ "billing": { "title": "Billing", "description": "Manage your subscription, usage, and payment methods." }
188
+ },
189
+ "quickLinks": {
190
+ "title": "Quick Actions",
191
+ "subtitle": "Jump into common tasks",
192
+ "deployProject": {
193
+ "title": "Deploy Project",
194
+ "description": "Import from Git"
195
+ },
196
+ "projects": {
197
+ "title": "Projects",
198
+ "description": "All projects"
199
+ },
200
+ "deployments": {
201
+ "title": "Deployments",
202
+ "description": "Build history"
203
+ },
204
+ "settings": {
205
+ "title": "Settings",
206
+ "description": "Manage access"
207
+ },
208
+ "domains": {
209
+ "title": "Domains",
210
+ "description": "Custom domains"
211
+ },
212
+ "billing": {
213
+ "title": "Billing",
214
+ "description": "Usage & plans"
215
+ }
216
+ }
217
+ }
218
+ }
@@ -0,0 +1,16 @@
1
+ import en from "./dictionaries/en.json";
2
+ import ar from "./dictionaries/ar.json";
3
+
4
+ export type Dictionary = typeof en;
5
+ export const dictionaries: Record<string, Dictionary> = { en, ar };
6
+
7
+ export type Locale = keyof typeof dictionaries & string;
8
+
9
+ export const defaultLocale: Locale = "en";
10
+ export const locales: Locale[] = Object.keys(dictionaries);
11
+
12
+ /** RTL languages */
13
+ const rtlLocales = new Set<Locale>(["ar"]);
14
+ export function isRtl(locale: Locale) {
15
+ return rtlLocales.has(locale);
16
+ }
@@ -0,0 +1,22 @@
1
+ import { api } from "./client";
2
+ import { endpoints } from "./endpoints";
3
+
4
+ /* ------------------------------------------------------------------ */
5
+ /* AI / Sessions API */
6
+ /* ------------------------------------------------------------------ */
7
+
8
+ export const aiApi = {
9
+ /** List AI chat sessions */
10
+ listSessions: (params: {
11
+ limit: number;
12
+ agent_id?: string;
13
+ namespace?: string;
14
+ }) =>
15
+ api.get<any>(endpoints.ai.sessionList, {
16
+ params: {
17
+ limit: params.limit,
18
+ agent_id: params.agent_id,
19
+ namespace: params.namespace ?? "self",
20
+ },
21
+ }),
22
+ };
@@ -0,0 +1,13 @@
1
+ import { authClient } from "@/lib/auth-client";
2
+
3
+ /**
4
+ * Retrieve the current session token for use in contexts where cookies
5
+ * cannot be sent automatically (e.g. EventSource / SSE URLs).
6
+ *
7
+ * Calls Better Auth's `getSession()` which sends the httpOnly cookie
8
+ * and returns the session object including the token string.
9
+ */
10
+ export async function getAuthToken(): Promise<string> {
11
+ const { data } = await authClient.getSession();
12
+ return data?.session?.token ?? "";
13
+ }