hub-launch 1.0.3

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 (331) hide show
  1. package/CHANGELOG.md +144 -0
  2. package/README.md +195 -0
  3. package/bin/hublaunch +20 -0
  4. package/dist/commands/checkout.d.ts +7 -0
  5. package/dist/commands/checkout.d.ts.map +1 -0
  6. package/dist/commands/checkout.js +164 -0
  7. package/dist/commands/checkout.js.map +1 -0
  8. package/dist/commands/clean.d.ts +7 -0
  9. package/dist/commands/clean.d.ts.map +1 -0
  10. package/dist/commands/clean.js +206 -0
  11. package/dist/commands/clean.js.map +1 -0
  12. package/dist/commands/close.d.ts +7 -0
  13. package/dist/commands/close.d.ts.map +1 -0
  14. package/dist/commands/close.js +109 -0
  15. package/dist/commands/close.js.map +1 -0
  16. package/dist/commands/create.d.ts +7 -0
  17. package/dist/commands/create.d.ts.map +1 -0
  18. package/dist/commands/create.js +367 -0
  19. package/dist/commands/create.js.map +1 -0
  20. package/dist/commands/diff.d.ts +7 -0
  21. package/dist/commands/diff.d.ts.map +1 -0
  22. package/dist/commands/diff.js +98 -0
  23. package/dist/commands/diff.js.map +1 -0
  24. package/dist/commands/execute.d.ts +7 -0
  25. package/dist/commands/execute.d.ts.map +1 -0
  26. package/dist/commands/execute.js +376 -0
  27. package/dist/commands/execute.js.map +1 -0
  28. package/dist/commands/init.d.ts +8 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +1243 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/interactive.d.ts +12 -0
  33. package/dist/commands/interactive.d.ts.map +1 -0
  34. package/dist/commands/interactive.js +1071 -0
  35. package/dist/commands/interactive.js.map +1 -0
  36. package/dist/commands/launch.d.ts +16 -0
  37. package/dist/commands/launch.d.ts.map +1 -0
  38. package/dist/commands/launch.js +684 -0
  39. package/dist/commands/launch.js.map +1 -0
  40. package/dist/commands/login.d.ts +40 -0
  41. package/dist/commands/login.d.ts.map +1 -0
  42. package/dist/commands/login.js +469 -0
  43. package/dist/commands/login.js.map +1 -0
  44. package/dist/commands/logs.d.ts +22 -0
  45. package/dist/commands/logs.d.ts.map +1 -0
  46. package/dist/commands/logs.js +105 -0
  47. package/dist/commands/logs.js.map +1 -0
  48. package/dist/commands/merge.d.ts +7 -0
  49. package/dist/commands/merge.d.ts.map +1 -0
  50. package/dist/commands/merge.js +240 -0
  51. package/dist/commands/merge.js.map +1 -0
  52. package/dist/commands/preview.d.ts +7 -0
  53. package/dist/commands/preview.d.ts.map +1 -0
  54. package/dist/commands/preview.js +160 -0
  55. package/dist/commands/preview.js.map +1 -0
  56. package/dist/commands/project.d.ts +18 -0
  57. package/dist/commands/project.d.ts.map +1 -0
  58. package/dist/commands/project.js +352 -0
  59. package/dist/commands/project.js.map +1 -0
  60. package/dist/commands/respond.d.ts +7 -0
  61. package/dist/commands/respond.d.ts.map +1 -0
  62. package/dist/commands/respond.js +112 -0
  63. package/dist/commands/respond.js.map +1 -0
  64. package/dist/commands/setPriority.d.ts +7 -0
  65. package/dist/commands/setPriority.d.ts.map +1 -0
  66. package/dist/commands/setPriority.js +112 -0
  67. package/dist/commands/setPriority.js.map +1 -0
  68. package/dist/commands/track.d.ts +7 -0
  69. package/dist/commands/track.d.ts.map +1 -0
  70. package/dist/commands/track.js +140 -0
  71. package/dist/commands/track.js.map +1 -0
  72. package/dist/commands/upload.d.ts +21 -0
  73. package/dist/commands/upload.d.ts.map +1 -0
  74. package/dist/commands/upload.js +145 -0
  75. package/dist/commands/upload.js.map +1 -0
  76. package/dist/commands/view.d.ts +7 -0
  77. package/dist/commands/view.d.ts.map +1 -0
  78. package/dist/commands/view.js +168 -0
  79. package/dist/commands/view.js.map +1 -0
  80. package/dist/commands/watch.d.ts +7 -0
  81. package/dist/commands/watch.d.ts.map +1 -0
  82. package/dist/commands/watch.js +438 -0
  83. package/dist/commands/watch.js.map +1 -0
  84. package/dist/commands/worktree.d.ts +7 -0
  85. package/dist/commands/worktree.d.ts.map +1 -0
  86. package/dist/commands/worktree.js +122 -0
  87. package/dist/commands/worktree.js.map +1 -0
  88. package/dist/config/command-names.d.ts +16 -0
  89. package/dist/config/command-names.d.ts.map +1 -0
  90. package/dist/config/command-names.js +17 -0
  91. package/dist/config/command-names.js.map +1 -0
  92. package/dist/config/constants.d.ts +12 -0
  93. package/dist/config/constants.d.ts.map +1 -0
  94. package/dist/config/constants.js +12 -0
  95. package/dist/config/constants.js.map +1 -0
  96. package/dist/config/index.d.ts +47 -0
  97. package/dist/config/index.d.ts.map +1 -0
  98. package/dist/config/index.js +175 -0
  99. package/dist/config/index.js.map +1 -0
  100. package/dist/index.d.ts +3 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +148 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/services/api/HulaApiClient.d.ts +170 -0
  105. package/dist/services/api/HulaApiClient.d.ts.map +1 -0
  106. package/dist/services/api/HulaApiClient.js +233 -0
  107. package/dist/services/api/HulaApiClient.js.map +1 -0
  108. package/dist/services/diff/DiffService.d.ts +44 -0
  109. package/dist/services/diff/DiffService.d.ts.map +1 -0
  110. package/dist/services/diff/DiffService.js +126 -0
  111. package/dist/services/diff/DiffService.js.map +1 -0
  112. package/dist/services/editor/EditorService.d.ts +53 -0
  113. package/dist/services/editor/EditorService.d.ts.map +1 -0
  114. package/dist/services/editor/EditorService.js +161 -0
  115. package/dist/services/editor/EditorService.js.map +1 -0
  116. package/dist/services/git/GitService.d.ts +124 -0
  117. package/dist/services/git/GitService.d.ts.map +1 -0
  118. package/dist/services/git/GitService.js +423 -0
  119. package/dist/services/git/GitService.js.map +1 -0
  120. package/dist/services/git/WorktreeService.d.ts +144 -0
  121. package/dist/services/git/WorktreeService.d.ts.map +1 -0
  122. package/dist/services/git/WorktreeService.js +505 -0
  123. package/dist/services/git/WorktreeService.js.map +1 -0
  124. package/dist/services/github/ActionsService.d.ts +66 -0
  125. package/dist/services/github/ActionsService.d.ts.map +1 -0
  126. package/dist/services/github/ActionsService.js +114 -0
  127. package/dist/services/github/ActionsService.js.map +1 -0
  128. package/dist/services/github/AssetUploadService.d.ts +103 -0
  129. package/dist/services/github/AssetUploadService.d.ts.map +1 -0
  130. package/dist/services/github/AssetUploadService.js +299 -0
  131. package/dist/services/github/AssetUploadService.js.map +1 -0
  132. package/dist/services/github/BatchCopilotDetectionService.d.ts +58 -0
  133. package/dist/services/github/BatchCopilotDetectionService.d.ts.map +1 -0
  134. package/dist/services/github/BatchCopilotDetectionService.js +321 -0
  135. package/dist/services/github/BatchCopilotDetectionService.js.map +1 -0
  136. package/dist/services/github/CopilotDetectionService.d.ts +40 -0
  137. package/dist/services/github/CopilotDetectionService.d.ts.map +1 -0
  138. package/dist/services/github/CopilotDetectionService.js +280 -0
  139. package/dist/services/github/CopilotDetectionService.js.map +1 -0
  140. package/dist/services/github/CopilotService.d.ts +27 -0
  141. package/dist/services/github/CopilotService.d.ts.map +1 -0
  142. package/dist/services/github/CopilotService.js +249 -0
  143. package/dist/services/github/CopilotService.js.map +1 -0
  144. package/dist/services/github/DeploymentDetectionService.d.ts +38 -0
  145. package/dist/services/github/DeploymentDetectionService.d.ts.map +1 -0
  146. package/dist/services/github/DeploymentDetectionService.js +104 -0
  147. package/dist/services/github/DeploymentDetectionService.js.map +1 -0
  148. package/dist/services/github/GithubAppService.d.ts +40 -0
  149. package/dist/services/github/GithubAppService.d.ts.map +1 -0
  150. package/dist/services/github/GithubAppService.js +187 -0
  151. package/dist/services/github/GithubAppService.js.map +1 -0
  152. package/dist/services/github/IssueService.d.ts +65 -0
  153. package/dist/services/github/IssueService.d.ts.map +1 -0
  154. package/dist/services/github/IssueService.js +231 -0
  155. package/dist/services/github/IssueService.js.map +1 -0
  156. package/dist/services/github/LabelService.d.ts +36 -0
  157. package/dist/services/github/LabelService.d.ts.map +1 -0
  158. package/dist/services/github/LabelService.js +122 -0
  159. package/dist/services/github/LabelService.js.map +1 -0
  160. package/dist/services/github/PRService.d.ts +77 -0
  161. package/dist/services/github/PRService.d.ts.map +1 -0
  162. package/dist/services/github/PRService.js +287 -0
  163. package/dist/services/github/PRService.js.map +1 -0
  164. package/dist/services/github/ProjectService.d.ts +144 -0
  165. package/dist/services/github/ProjectService.d.ts.map +1 -0
  166. package/dist/services/github/ProjectService.js +804 -0
  167. package/dist/services/github/ProjectService.js.map +1 -0
  168. package/dist/services/hooks/HookExecutor.d.ts +66 -0
  169. package/dist/services/hooks/HookExecutor.d.ts.map +1 -0
  170. package/dist/services/hooks/HookExecutor.js +227 -0
  171. package/dist/services/hooks/HookExecutor.js.map +1 -0
  172. package/dist/services/hooks/index.d.ts +2 -0
  173. package/dist/services/hooks/index.d.ts.map +1 -0
  174. package/dist/services/hooks/index.js +2 -0
  175. package/dist/services/hooks/index.js.map +1 -0
  176. package/dist/services/logs/LogFormatterService.d.ts +17 -0
  177. package/dist/services/logs/LogFormatterService.d.ts.map +1 -0
  178. package/dist/services/logs/LogFormatterService.js +35 -0
  179. package/dist/services/logs/LogFormatterService.js.map +1 -0
  180. package/dist/services/logs/TempFileService.d.ts +27 -0
  181. package/dist/services/logs/TempFileService.d.ts.map +1 -0
  182. package/dist/services/logs/TempFileService.js +90 -0
  183. package/dist/services/logs/TempFileService.js.map +1 -0
  184. package/dist/services/logs/index.d.ts +3 -0
  185. package/dist/services/logs/index.d.ts.map +1 -0
  186. package/dist/services/logs/index.js +4 -0
  187. package/dist/services/logs/index.js.map +1 -0
  188. package/dist/services/plan/PlanService.d.ts +70 -0
  189. package/dist/services/plan/PlanService.d.ts.map +1 -0
  190. package/dist/services/plan/PlanService.js +211 -0
  191. package/dist/services/plan/PlanService.js.map +1 -0
  192. package/dist/services/polling/GitHubDirectPollingAdapter.d.ts +16 -0
  193. package/dist/services/polling/GitHubDirectPollingAdapter.d.ts.map +1 -0
  194. package/dist/services/polling/GitHubDirectPollingAdapter.js +87 -0
  195. package/dist/services/polling/GitHubDirectPollingAdapter.js.map +1 -0
  196. package/dist/services/polling/HulaServerPollingAdapter.d.ts +23 -0
  197. package/dist/services/polling/HulaServerPollingAdapter.d.ts.map +1 -0
  198. package/dist/services/polling/HulaServerPollingAdapter.js +78 -0
  199. package/dist/services/polling/HulaServerPollingAdapter.js.map +1 -0
  200. package/dist/services/polling/IStatusPollingAdapter.d.ts +29 -0
  201. package/dist/services/polling/IStatusPollingAdapter.d.ts.map +1 -0
  202. package/dist/services/polling/IStatusPollingAdapter.js +2 -0
  203. package/dist/services/polling/IStatusPollingAdapter.js.map +1 -0
  204. package/dist/services/polling/StatusPollingAdapterFactory.d.ts +14 -0
  205. package/dist/services/polling/StatusPollingAdapterFactory.d.ts.map +1 -0
  206. package/dist/services/polling/StatusPollingAdapterFactory.js +41 -0
  207. package/dist/services/polling/StatusPollingAdapterFactory.js.map +1 -0
  208. package/dist/services/polling/index.d.ts +5 -0
  209. package/dist/services/polling/index.d.ts.map +1 -0
  210. package/dist/services/polling/index.js +5 -0
  211. package/dist/services/polling/index.js.map +1 -0
  212. package/dist/services/preview/PreviewService.d.ts +86 -0
  213. package/dist/services/preview/PreviewService.d.ts.map +1 -0
  214. package/dist/services/preview/PreviewService.js +439 -0
  215. package/dist/services/preview/PreviewService.js.map +1 -0
  216. package/dist/services/tracking/ProjectTrackingAdapter.d.ts +41 -0
  217. package/dist/services/tracking/ProjectTrackingAdapter.d.ts.map +1 -0
  218. package/dist/services/tracking/ProjectTrackingAdapter.js +230 -0
  219. package/dist/services/tracking/ProjectTrackingAdapter.js.map +1 -0
  220. package/dist/services/tracking/RemoteTrackingAdapter.d.ts +62 -0
  221. package/dist/services/tracking/RemoteTrackingAdapter.d.ts.map +1 -0
  222. package/dist/services/tracking/RemoteTrackingAdapter.js +242 -0
  223. package/dist/services/tracking/RemoteTrackingAdapter.js.map +1 -0
  224. package/dist/services/tracking/TrackingAdapterFactory.d.ts +25 -0
  225. package/dist/services/tracking/TrackingAdapterFactory.d.ts.map +1 -0
  226. package/dist/services/tracking/TrackingAdapterFactory.js +55 -0
  227. package/dist/services/tracking/TrackingAdapterFactory.js.map +1 -0
  228. package/dist/services/tracking/TrackingService.d.ts +104 -0
  229. package/dist/services/tracking/TrackingService.d.ts.map +1 -0
  230. package/dist/services/tracking/TrackingService.js +256 -0
  231. package/dist/services/tracking/TrackingService.js.map +1 -0
  232. package/dist/services/tracking/UntrackedIssuesService.d.ts +20 -0
  233. package/dist/services/tracking/UntrackedIssuesService.d.ts.map +1 -0
  234. package/dist/services/tracking/UntrackedIssuesService.js +148 -0
  235. package/dist/services/tracking/UntrackedIssuesService.js.map +1 -0
  236. package/dist/services/tracking/local-file-migration.d.ts +16 -0
  237. package/dist/services/tracking/local-file-migration.d.ts.map +1 -0
  238. package/dist/services/tracking/local-file-migration.js +86 -0
  239. package/dist/services/tracking/local-file-migration.js.map +1 -0
  240. package/dist/templates/planning-instructions.md +752 -0
  241. package/dist/templates/proceed-instructions.md +453 -0
  242. package/dist/templates/scripts/hula-fix-commit.sh +110 -0
  243. package/dist/templates/scripts/hula-fix-setup.sh +145 -0
  244. package/dist/templates/scripts/hula-launch-run.sh +89 -0
  245. package/dist/templates/scripts/hula-merge-local.sh +138 -0
  246. package/dist/templates/scripts/hula-merge-remote.sh +74 -0
  247. package/dist/templates/scripts/hula-read-config.sh +38 -0
  248. package/dist/templates/scripts/hula-verify-gather.sh +135 -0
  249. package/dist/templates/scripts/hula-verify-post.sh +84 -0
  250. package/dist/templates/skills/hula-confirm/SKILL.md +361 -0
  251. package/dist/templates/skills/hula-create/SKILL.md +211 -0
  252. package/dist/templates/skills/hula-fix/SKILL.md +224 -0
  253. package/dist/templates/skills/hula-launch/SKILL.md +159 -0
  254. package/dist/templates/skills/hula-log/SKILL.md +105 -0
  255. package/dist/templates/skills/hula-merge/SKILL.md +387 -0
  256. package/dist/templates/skills/hula-plan/SKILL.md +148 -0
  257. package/dist/templates/skills/hula-upload/SKILL.md +115 -0
  258. package/dist/templates/skills/hula-verify/SKILL.md +754 -0
  259. package/dist/types/common.schema.d.ts +46 -0
  260. package/dist/types/common.schema.d.ts.map +1 -0
  261. package/dist/types/common.schema.js +60 -0
  262. package/dist/types/common.schema.js.map +1 -0
  263. package/dist/types/config.schema.d.ts +443 -0
  264. package/dist/types/config.schema.d.ts.map +1 -0
  265. package/dist/types/config.schema.js +126 -0
  266. package/dist/types/config.schema.js.map +1 -0
  267. package/dist/types/index.d.ts +6 -0
  268. package/dist/types/index.d.ts.map +1 -0
  269. package/dist/types/index.js +7 -0
  270. package/dist/types/index.js.map +1 -0
  271. package/dist/types/issue.schema.d.ts +136 -0
  272. package/dist/types/issue.schema.d.ts.map +1 -0
  273. package/dist/types/issue.schema.js +49 -0
  274. package/dist/types/issue.schema.js.map +1 -0
  275. package/dist/types/pr.schema.d.ts +118 -0
  276. package/dist/types/pr.schema.d.ts.map +1 -0
  277. package/dist/types/pr.schema.js +40 -0
  278. package/dist/types/pr.schema.js.map +1 -0
  279. package/dist/types/tracking.schema.d.ts +340 -0
  280. package/dist/types/tracking.schema.d.ts.map +1 -0
  281. package/dist/types/tracking.schema.js +56 -0
  282. package/dist/types/tracking.schema.js.map +1 -0
  283. package/dist/utils/browser-launcher.d.ts +60 -0
  284. package/dist/utils/browser-launcher.d.ts.map +1 -0
  285. package/dist/utils/browser-launcher.js +263 -0
  286. package/dist/utils/browser-launcher.js.map +1 -0
  287. package/dist/utils/cache.d.ts +44 -0
  288. package/dist/utils/cache.d.ts.map +1 -0
  289. package/dist/utils/cache.js +94 -0
  290. package/dist/utils/cache.js.map +1 -0
  291. package/dist/utils/config-parser.d.ts +16 -0
  292. package/dist/utils/config-parser.d.ts.map +1 -0
  293. package/dist/utils/config-parser.js +210 -0
  294. package/dist/utils/config-parser.js.map +1 -0
  295. package/dist/utils/editor.d.ts +21 -0
  296. package/dist/utils/editor.d.ts.map +1 -0
  297. package/dist/utils/editor.js +213 -0
  298. package/dist/utils/editor.js.map +1 -0
  299. package/dist/utils/git-utils.d.ts +5 -0
  300. package/dist/utils/git-utils.d.ts.map +1 -0
  301. package/dist/utils/git-utils.js +18 -0
  302. package/dist/utils/git-utils.js.map +1 -0
  303. package/dist/utils/github-cli.d.ts +62 -0
  304. package/dist/utils/github-cli.d.ts.map +1 -0
  305. package/dist/utils/github-cli.js +492 -0
  306. package/dist/utils/github-cli.js.map +1 -0
  307. package/dist/utils/logger.d.ts +45 -0
  308. package/dist/utils/logger.d.ts.map +1 -0
  309. package/dist/utils/logger.js +118 -0
  310. package/dist/utils/logger.js.map +1 -0
  311. package/dist/utils/open-url.d.ts +19 -0
  312. package/dist/utils/open-url.d.ts.map +1 -0
  313. package/dist/utils/open-url.js +37 -0
  314. package/dist/utils/open-url.js.map +1 -0
  315. package/dist/utils/project-resolver.d.ts +13 -0
  316. package/dist/utils/project-resolver.d.ts.map +1 -0
  317. package/dist/utils/project-resolver.js +35 -0
  318. package/dist/utils/project-resolver.js.map +1 -0
  319. package/dist/utils/prompts.d.ts +80 -0
  320. package/dist/utils/prompts.d.ts.map +1 -0
  321. package/dist/utils/prompts.js +326 -0
  322. package/dist/utils/prompts.js.map +1 -0
  323. package/dist/utils/shell.d.ts +54 -0
  324. package/dist/utils/shell.d.ts.map +1 -0
  325. package/dist/utils/shell.js +152 -0
  326. package/dist/utils/shell.js.map +1 -0
  327. package/dist/utils/validators.d.ts +32 -0
  328. package/dist/utils/validators.d.ts.map +1 -0
  329. package/dist/utils/validators.js +64 -0
  330. package/dist/utils/validators.js.map +1 -0
  331. package/package.json +73 -0
@@ -0,0 +1,86 @@
1
+ import type { Config } from '../../types/index.js';
2
+ /**
3
+ * Supported authentication providers
4
+ */
5
+ export type AuthProvider = 'clerk' | 'auth0' | 'nextauth' | 'custom' | 'none';
6
+ /**
7
+ * Authentication configuration
8
+ */
9
+ export interface AuthConfig {
10
+ provider: AuthProvider;
11
+ /** Email/username for login */
12
+ email?: string;
13
+ /** Password for login */
14
+ password?: string;
15
+ /** Custom selectors for login form (optional) */
16
+ selectors?: {
17
+ emailInput?: string;
18
+ passwordInput?: string;
19
+ submitButton?: string;
20
+ signInButton?: string;
21
+ };
22
+ }
23
+ /**
24
+ * Service for opening deployment previews with automated authentication
25
+ * Supports credential-based login for Clerk, Auth0, and custom providers
26
+ */
27
+ export declare class PreviewService {
28
+ private readonly config;
29
+ constructor(config: Config);
30
+ /**
31
+ * Ensure the user data directory exists
32
+ */
33
+ private ensureUserDataDir;
34
+ /**
35
+ * Get authentication config from environment and config
36
+ */
37
+ private getAuthConfig;
38
+ /**
39
+ * Check if a page requires login
40
+ */
41
+ private requiresLogin;
42
+ /**
43
+ * Perform automated login based on provider
44
+ */
45
+ private performLogin;
46
+ /**
47
+ * Login with Clerk authentication
48
+ */
49
+ private loginWithClerk;
50
+ /**
51
+ * Login with Auth0 authentication
52
+ */
53
+ private loginWithAuth0;
54
+ /**
55
+ * Login with NextAuth/next-auth
56
+ */
57
+ private loginWithNextAuth;
58
+ /**
59
+ * Login with custom selectors
60
+ */
61
+ private loginWithCustom;
62
+ /**
63
+ * Generic login attempt
64
+ */
65
+ private loginGeneric;
66
+ /**
67
+ * Open a deployment URL with automated login
68
+ *
69
+ * @param url - The deployment URL to open
70
+ * @param options - Optional settings
71
+ * @returns true if browser opened and login successful
72
+ */
73
+ openWithAutoLogin(url: string, options?: {
74
+ keepOpen?: boolean;
75
+ }): Promise<boolean>;
76
+ /**
77
+ * Open a URL in the background with auto-login (fire-and-forget)
78
+ * The browser opens and the CLI returns immediately
79
+ */
80
+ openInBackground(url: string): Promise<boolean>;
81
+ /**
82
+ * Clear the saved preview session
83
+ */
84
+ clearSession(): Promise<void>;
85
+ }
86
+ //# sourceMappingURL=PreviewService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewService.d.ts","sourceRoot":"","sources":["../../../src/services/preview/PreviewService.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AASnD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;YACW,aAAa;IA6B3B;;OAEG;YACW,YAAY;IAsC1B;;OAEG;YACW,cAAc;IA6C5B;;OAEG;YACW,cAAc;IAsB5B;;OAEG;YACW,iBAAiB;IAsB/B;;OAEG;YACW,eAAe;IAoC7B;;OAEG;YACW,YAAY;IA6E1B;;;;;;OAMG;IACG,iBAAiB,CACrB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,OAAO,CAAC;KACf,GACL,OAAO,CAAC,OAAO,CAAC;IAoGnB;;;OAGG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqDrD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CASpC"}
@@ -0,0 +1,439 @@
1
+ import { chromium } from '@playwright/test';
2
+ import { logger } from '../../utils/logger.js';
3
+ import { existsSync, mkdirSync } from 'fs';
4
+ import { join } from 'path';
5
+ import { homedir, tmpdir } from 'os';
6
+ import { COMMON_CHROME_ARGS, checkChromiumInstalled, installChromium, } from '../../utils/browser-launcher.js';
7
+ const TIMEOUT = 45000; // 45 second timeout
8
+ const PAGE_LOAD_TIMEOUT = 30000; // 30 seconds for page load
9
+ const LOGIN_TIMEOUT = 10000; // 10 seconds for login operations
10
+ // Persistent profile directory for preview auth
11
+ const USER_DATA_DIR = join(homedir(), '.hublaunch', 'preview-profile');
12
+ /**
13
+ * Service for opening deployment previews with automated authentication
14
+ * Supports credential-based login for Clerk, Auth0, and custom providers
15
+ */
16
+ export class PreviewService {
17
+ config;
18
+ constructor(config) {
19
+ this.config = config;
20
+ }
21
+ /**
22
+ * Ensure the user data directory exists
23
+ */
24
+ ensureUserDataDir() {
25
+ if (!existsSync(USER_DATA_DIR)) {
26
+ mkdirSync(USER_DATA_DIR, { recursive: true });
27
+ logger.debug(`Created profile directory: ${USER_DATA_DIR}`);
28
+ }
29
+ }
30
+ /**
31
+ * Get authentication config from environment and config
32
+ */
33
+ getAuthConfig() {
34
+ const email = process.env.TEST_USER_EMAIL || process.env.PREVIEW_EMAIL;
35
+ const password = process.env.TEST_USER_PASSWORD || process.env.PREVIEW_PASSWORD;
36
+ // Determine provider from config or environment
37
+ const provider = (this.config.previewAuth?.provider ||
38
+ process.env.PREVIEW_AUTH_PROVIDER ||
39
+ 'clerk');
40
+ return {
41
+ provider,
42
+ email,
43
+ password,
44
+ selectors: this.config.previewAuth?.selectors,
45
+ };
46
+ }
47
+ /**
48
+ * Check if a page requires login
49
+ */
50
+ async requiresLogin(page) {
51
+ try {
52
+ // Check for common login indicators
53
+ const loginIndicators = [
54
+ '[data-clerk-id]', // Clerk
55
+ '[data-auth0]', // Auth0
56
+ 'button:has-text("Sign in")',
57
+ 'button:has-text("Log in")',
58
+ 'a:has-text("Sign in")',
59
+ 'a:has-text("Log in")',
60
+ 'input[name="email"]',
61
+ 'input[name="identifier"]',
62
+ 'input[type="email"]',
63
+ ];
64
+ for (const selector of loginIndicators) {
65
+ const element = await page.$(selector).catch(() => null);
66
+ if (element) {
67
+ logger.debug(`Login indicator found: ${selector}`);
68
+ return true;
69
+ }
70
+ }
71
+ return false;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ /**
78
+ * Perform automated login based on provider
79
+ */
80
+ async performLogin(page, auth) {
81
+ if (!auth.email || !auth.password) {
82
+ logger.warning('No credentials provided for auto-login');
83
+ logger.info('Set TEST_USER_EMAIL and TEST_USER_PASSWORD environment variables');
84
+ logger.info('Or set PREVIEW_EMAIL and PREVIEW_PASSWORD');
85
+ return false;
86
+ }
87
+ logger.info('Performing automated login...');
88
+ try {
89
+ switch (auth.provider) {
90
+ case 'clerk':
91
+ return await this.loginWithClerk(page, auth);
92
+ case 'auth0':
93
+ return await this.loginWithAuth0(page, auth);
94
+ case 'nextauth':
95
+ return await this.loginWithNextAuth(page, auth);
96
+ case 'custom':
97
+ return await this.loginWithCustom(page, auth);
98
+ case 'none':
99
+ return true; // No login needed
100
+ default:
101
+ // Try generic login
102
+ return await this.loginGeneric(page, auth);
103
+ }
104
+ }
105
+ catch (error) {
106
+ logger.error(`Login failed: ${error instanceof Error ? error.message : String(error)}`);
107
+ // Take screenshot for debugging
108
+ const screenshotPath = join(tmpdir(), 'preview-login-failed.png');
109
+ await page.screenshot({ path: screenshotPath, fullPage: true });
110
+ logger.info(`📸 Debug screenshot saved to: ${screenshotPath}`);
111
+ return false;
112
+ }
113
+ }
114
+ /**
115
+ * Login with Clerk authentication
116
+ */
117
+ async loginWithClerk(page, auth) {
118
+ logger.debug('Using Clerk authentication');
119
+ // Wait for Clerk widget
120
+ await page.waitForSelector('[data-clerk-id]', { timeout: LOGIN_TIMEOUT });
121
+ // Click sign-in button if present
122
+ const signInBtn = await page.$('button:has-text("Sign in")').catch(() => null);
123
+ if (signInBtn) {
124
+ await signInBtn.click();
125
+ await page.waitForTimeout(1000);
126
+ }
127
+ // Enter email
128
+ const emailInput = auth.selectors?.emailInput || 'input[name="identifier"]';
129
+ await page.waitForSelector(emailInput, { timeout: LOGIN_TIMEOUT });
130
+ await page.fill(emailInput, auth.email);
131
+ // Click continue
132
+ const continueBtn = await page.$('button:has-text("Continue")').catch(() => null);
133
+ if (continueBtn) {
134
+ await continueBtn.click();
135
+ await page.waitForTimeout(1000);
136
+ }
137
+ // Enter password
138
+ const passwordInput = auth.selectors?.passwordInput || 'input[name="password"]';
139
+ await page.waitForSelector(passwordInput, { timeout: LOGIN_TIMEOUT });
140
+ await page.fill(passwordInput, auth.password);
141
+ // Click continue/submit
142
+ const submitBtn = (await page.$('button:has-text("Continue")').catch(() => null)) ||
143
+ (await page.$('button:has-text("Sign in")').catch(() => null));
144
+ if (submitBtn) {
145
+ await submitBtn.click();
146
+ }
147
+ // Wait for navigation
148
+ await page.waitForTimeout(3000);
149
+ logger.success('✓ Logged in with Clerk');
150
+ return true;
151
+ }
152
+ /**
153
+ * Login with Auth0 authentication
154
+ */
155
+ async loginWithAuth0(page, auth) {
156
+ logger.debug('Using Auth0 authentication');
157
+ // Wait for Auth0 login form
158
+ const emailInput = auth.selectors?.emailInput || 'input[name="email"], input[name="username"]';
159
+ await page.waitForSelector(emailInput, { timeout: LOGIN_TIMEOUT });
160
+ await page.fill(emailInput, auth.email);
161
+ const passwordInput = auth.selectors?.passwordInput || 'input[name="password"]';
162
+ await page.fill(passwordInput, auth.password);
163
+ // Submit
164
+ const submitBtn = auth.selectors?.submitButton || 'button[type="submit"]';
165
+ await page.click(submitBtn);
166
+ // Wait for navigation
167
+ await page.waitForTimeout(3000);
168
+ logger.success('✓ Logged in with Auth0');
169
+ return true;
170
+ }
171
+ /**
172
+ * Login with NextAuth/next-auth
173
+ */
174
+ async loginWithNextAuth(page, auth) {
175
+ logger.debug('Using NextAuth authentication');
176
+ // Look for credentials provider
177
+ const emailInput = auth.selectors?.emailInput || 'input[name="email"], input[id="email"]';
178
+ await page.waitForSelector(emailInput, { timeout: LOGIN_TIMEOUT });
179
+ await page.fill(emailInput, auth.email);
180
+ const passwordInput = auth.selectors?.passwordInput || 'input[name="password"], input[id="password"]';
181
+ await page.fill(passwordInput, auth.password);
182
+ // Submit
183
+ const submitBtn = auth.selectors?.submitButton || 'button[type="submit"]';
184
+ await page.click(submitBtn);
185
+ // Wait for navigation
186
+ await page.waitForTimeout(3000);
187
+ logger.success('✓ Logged in with NextAuth');
188
+ return true;
189
+ }
190
+ /**
191
+ * Login with custom selectors
192
+ */
193
+ async loginWithCustom(page, auth) {
194
+ logger.debug('Using custom authentication');
195
+ if (!auth.selectors) {
196
+ throw new Error('Custom auth requires selectors in config');
197
+ }
198
+ // Click sign-in button if specified
199
+ if (auth.selectors.signInButton) {
200
+ await page.click(auth.selectors.signInButton);
201
+ await page.waitForTimeout(1000);
202
+ }
203
+ // Fill email
204
+ if (auth.selectors.emailInput) {
205
+ await page.waitForSelector(auth.selectors.emailInput, { timeout: LOGIN_TIMEOUT });
206
+ await page.fill(auth.selectors.emailInput, auth.email);
207
+ }
208
+ // Fill password
209
+ if (auth.selectors.passwordInput) {
210
+ await page.fill(auth.selectors.passwordInput, auth.password);
211
+ }
212
+ // Submit
213
+ if (auth.selectors.submitButton) {
214
+ await page.click(auth.selectors.submitButton);
215
+ }
216
+ // Wait for navigation
217
+ await page.waitForTimeout(3000);
218
+ logger.success('✓ Logged in with custom auth');
219
+ return true;
220
+ }
221
+ /**
222
+ * Generic login attempt
223
+ */
224
+ async loginGeneric(page, auth) {
225
+ logger.debug('Attempting generic login');
226
+ // Try to find and click sign-in button
227
+ const signInSelectors = [
228
+ 'button:has-text("Sign in")',
229
+ 'button:has-text("Log in")',
230
+ 'a:has-text("Sign in")',
231
+ 'a:has-text("Log in")',
232
+ ];
233
+ for (const selector of signInSelectors) {
234
+ const btn = await page.$(selector).catch(() => null);
235
+ if (btn) {
236
+ await btn.click();
237
+ await page.waitForTimeout(1000);
238
+ break;
239
+ }
240
+ }
241
+ // Find and fill email
242
+ const emailSelectors = [
243
+ 'input[name="email"]',
244
+ 'input[name="identifier"]',
245
+ 'input[type="email"]',
246
+ 'input[id="email"]',
247
+ ];
248
+ for (const selector of emailSelectors) {
249
+ const input = await page.$(selector).catch(() => null);
250
+ if (input) {
251
+ await page.fill(selector, auth.email);
252
+ break;
253
+ }
254
+ }
255
+ // Look for continue button (multi-step login)
256
+ const continueBtn = await page.$('button:has-text("Continue")').catch(() => null);
257
+ if (continueBtn) {
258
+ await continueBtn.click();
259
+ await page.waitForTimeout(1000);
260
+ }
261
+ // Find and fill password
262
+ const passwordSelectors = ['input[name="password"]', 'input[type="password"]', 'input[id="password"]'];
263
+ for (const selector of passwordSelectors) {
264
+ const input = await page.$(selector).catch(() => null);
265
+ if (input) {
266
+ await page.fill(selector, auth.password);
267
+ break;
268
+ }
269
+ }
270
+ // Submit
271
+ const submitSelectors = [
272
+ 'button[type="submit"]',
273
+ 'button:has-text("Continue")',
274
+ 'button:has-text("Sign in")',
275
+ 'button:has-text("Log in")',
276
+ ];
277
+ for (const selector of submitSelectors) {
278
+ const btn = await page.$(selector).catch(() => null);
279
+ if (btn) {
280
+ await btn.click();
281
+ break;
282
+ }
283
+ }
284
+ // Wait for navigation
285
+ await page.waitForTimeout(3000);
286
+ logger.success('✓ Login completed');
287
+ return true;
288
+ }
289
+ /**
290
+ * Open a deployment URL with automated login
291
+ *
292
+ * @param url - The deployment URL to open
293
+ * @param options - Optional settings
294
+ * @returns true if browser opened and login successful
295
+ */
296
+ async openWithAutoLogin(url, options = {}) {
297
+ const { keepOpen = true } = options;
298
+ // Check if Playwright Chromium is installed
299
+ const hasChromium = await checkChromiumInstalled();
300
+ if (!hasChromium) {
301
+ logger.blank();
302
+ logger.warning('Playwright Chromium is not installed');
303
+ logger.info('Chromium browser is required for authenticated preview');
304
+ logger.blank();
305
+ const shouldInstall = process.env.CI !== 'true' &&
306
+ (await import('../../utils/prompts.js').then((m) => m.confirm('Would you like to install it now?', true)));
307
+ if (shouldInstall) {
308
+ const installed = await installChromium();
309
+ if (!installed) {
310
+ return false;
311
+ }
312
+ }
313
+ else {
314
+ logger.info('Skipping browser preview');
315
+ logger.info('Install later with: npx playwright install chromium');
316
+ return false;
317
+ }
318
+ }
319
+ this.ensureUserDataDir();
320
+ let context = null;
321
+ try {
322
+ logger.info('Launching browser...');
323
+ // Always launch visible browser for preview
324
+ context = await chromium.launchPersistentContext(USER_DATA_DIR, {
325
+ headless: false,
326
+ timeout: TIMEOUT,
327
+ args: COMMON_CHROME_ARGS,
328
+ });
329
+ // Open the URL
330
+ logger.info(`Opening: ${url}`);
331
+ const page = await context.newPage();
332
+ await page.goto(url, {
333
+ waitUntil: 'load',
334
+ timeout: PAGE_LOAD_TIMEOUT,
335
+ });
336
+ // Wait for page to settle
337
+ await page.waitForTimeout(2000);
338
+ // Check if login is required
339
+ const needsLogin = await this.requiresLogin(page);
340
+ if (needsLogin) {
341
+ logger.info('Login required - attempting auto-login...');
342
+ const auth = this.getAuthConfig();
343
+ const loginSuccess = await this.performLogin(page, auth);
344
+ if (!loginSuccess) {
345
+ logger.warning('Auto-login failed - please login manually');
346
+ logger.info('Your session will be saved for future previews');
347
+ }
348
+ }
349
+ else {
350
+ logger.debug('No login required (already authenticated or public page)');
351
+ }
352
+ logger.success('✓ Preview opened');
353
+ logger.blank();
354
+ if (keepOpen) {
355
+ logger.info('Browser will stay open for you to interact with');
356
+ logger.info('Close the browser window when you are done');
357
+ logger.blank();
358
+ // Wait for browser to be closed by user
359
+ await new Promise((resolve) => {
360
+ context.on('close', () => {
361
+ resolve();
362
+ });
363
+ });
364
+ logger.info('Browser closed');
365
+ }
366
+ return true;
367
+ }
368
+ catch (error) {
369
+ logger.error(`Failed to open preview: ${error instanceof Error ? error.message : String(error)}`);
370
+ if (context) {
371
+ await context.close();
372
+ }
373
+ return false;
374
+ }
375
+ }
376
+ /**
377
+ * Open a URL in the background with auto-login (fire-and-forget)
378
+ * The browser opens and the CLI returns immediately
379
+ */
380
+ async openInBackground(url) {
381
+ // Check if Playwright Chromium is installed
382
+ const hasChromium = await checkChromiumInstalled();
383
+ if (!hasChromium) {
384
+ logger.warning('Playwright not installed - falling back to system browser');
385
+ const open = await import('open');
386
+ await open.default(url);
387
+ return true;
388
+ }
389
+ this.ensureUserDataDir();
390
+ try {
391
+ logger.info('Launching browser in background...');
392
+ // Launch browser with persistent session (always visible)
393
+ const context = await chromium.launchPersistentContext(USER_DATA_DIR, {
394
+ headless: false,
395
+ timeout: TIMEOUT,
396
+ args: COMMON_CHROME_ARGS,
397
+ });
398
+ // Open the URL
399
+ const page = await context.newPage();
400
+ await page.goto(url, {
401
+ waitUntil: 'load',
402
+ timeout: PAGE_LOAD_TIMEOUT,
403
+ });
404
+ // Wait for page to settle
405
+ await page.waitForTimeout(2000);
406
+ // Check if login is required and attempt auto-login
407
+ const needsLogin = await this.requiresLogin(page);
408
+ if (needsLogin) {
409
+ const auth = this.getAuthConfig();
410
+ if (auth.email && auth.password) {
411
+ logger.info('Attempting auto-login...');
412
+ await this.performLogin(page, auth);
413
+ }
414
+ }
415
+ logger.success('✓ Browser opened in background');
416
+ logger.info('You can continue working - close the browser when done');
417
+ // Don't wait for browser to close - return immediately
418
+ return true;
419
+ }
420
+ catch (error) {
421
+ logger.error(`Failed to open preview: ${error instanceof Error ? error.message : String(error)}`);
422
+ return false;
423
+ }
424
+ }
425
+ /**
426
+ * Clear the saved preview session
427
+ */
428
+ async clearSession() {
429
+ const { rmSync } = await import('fs');
430
+ try {
431
+ rmSync(USER_DATA_DIR, { recursive: true, force: true });
432
+ logger.success('Preview session cleared');
433
+ }
434
+ catch (error) {
435
+ logger.error(`Failed to clear session: ${error instanceof Error ? error.message : String(error)}`);
436
+ }
437
+ }
438
+ }
439
+ //# sourceMappingURL=PreviewService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewService.js","sourceRoot":"","sources":["../../../src/services/preview/PreviewService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type ITrackingAdapter } from './TrackingService.js';
2
+ import { type TrackedPlan as TrackedIssue } from '../../types/index.js';
3
+ /**
4
+ * GitHub Projects V2 adapter for tracking issues
5
+ * Reads/writes tracking data from GitHub Projects instead of local file
6
+ * Deployment status is detected from PR comments when fetching issues
7
+ * Notification timestamps are cached locally (minimal persistence)
8
+ *
9
+ * @note This adapter is in development and has type safety disabled temporarily
10
+ */
11
+ export declare class ProjectTrackingAdapter implements ITrackingAdapter {
12
+ private projectService;
13
+ private projectNumber;
14
+ private projectId;
15
+ private owner?;
16
+ private notificationCachePath;
17
+ constructor(projectNumber: number, projectId: string, owner?: string);
18
+ /**
19
+ * Get owner from repo or use configured owner
20
+ */
21
+ private getOwner;
22
+ /**
23
+ * Load notification timestamps from cache
24
+ */
25
+ private loadNotificationCache;
26
+ /**
27
+ * Save notification timestamps to cache
28
+ */
29
+ private saveNotificationCache;
30
+ /**
31
+ * Read all tracked issues from GitHub Projects
32
+ * Deployment status is detected from PR comments by ProjectService
33
+ */
34
+ read(): Promise<TrackedIssue[]>;
35
+ /**
36
+ * Write tracked issues to GitHub Projects
37
+ * This syncs all local changes to the project
38
+ */
39
+ write(issues: TrackedIssue[]): Promise<void>;
40
+ }
41
+ //# sourceMappingURL=ProjectTrackingAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectTrackingAdapter.d.ts","sourceRoot":"","sources":["../../../src/services/tracking/ProjectTrackingAdapter.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EACL,KAAK,WAAW,IAAI,YAAY,EAGjC,MAAM,sBAAsB,CAAC;AAQ9B;;;;;;;GAOG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,qBAAqB,CAAuC;gBAExD,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAOpE;;OAEG;YACW,QAAQ;IAStB;;OAEG;YACW,qBAAqB;IAcnC;;OAEG;YACW,qBAAqB;IAwBnC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IA6DrC;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA0LnD"}