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.
- package/CHANGELOG.md +144 -0
- package/README.md +195 -0
- package/bin/hublaunch +20 -0
- package/dist/commands/checkout.d.ts +7 -0
- package/dist/commands/checkout.d.ts.map +1 -0
- package/dist/commands/checkout.js +164 -0
- package/dist/commands/checkout.js.map +1 -0
- package/dist/commands/clean.d.ts +7 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +206 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/close.d.ts +7 -0
- package/dist/commands/close.d.ts.map +1 -0
- package/dist/commands/close.js +109 -0
- package/dist/commands/close.js.map +1 -0
- package/dist/commands/create.d.ts +7 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +367 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/diff.d.ts +7 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +98 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/execute.d.ts +7 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +376 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +1243 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/interactive.d.ts +12 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +1071 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/launch.d.ts +16 -0
- package/dist/commands/launch.d.ts.map +1 -0
- package/dist/commands/launch.js +684 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/login.d.ts +40 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +469 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +22 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +105 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/merge.d.ts +7 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.js +240 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/preview.d.ts +7 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +160 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/project.d.ts +18 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +352 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/respond.d.ts +7 -0
- package/dist/commands/respond.d.ts.map +1 -0
- package/dist/commands/respond.js +112 -0
- package/dist/commands/respond.js.map +1 -0
- package/dist/commands/setPriority.d.ts +7 -0
- package/dist/commands/setPriority.d.ts.map +1 -0
- package/dist/commands/setPriority.js +112 -0
- package/dist/commands/setPriority.js.map +1 -0
- package/dist/commands/track.d.ts +7 -0
- package/dist/commands/track.d.ts.map +1 -0
- package/dist/commands/track.js +140 -0
- package/dist/commands/track.js.map +1 -0
- package/dist/commands/upload.d.ts +21 -0
- package/dist/commands/upload.d.ts.map +1 -0
- package/dist/commands/upload.js +145 -0
- package/dist/commands/upload.js.map +1 -0
- package/dist/commands/view.d.ts +7 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +168 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/commands/watch.d.ts +7 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +438 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/worktree.d.ts +7 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +122 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/config/command-names.d.ts +16 -0
- package/dist/config/command-names.d.ts.map +1 -0
- package/dist/config/command-names.js +17 -0
- package/dist/config/command-names.js.map +1 -0
- package/dist/config/constants.d.ts +12 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +12 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/index.d.ts +47 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +175 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +148 -0
- package/dist/index.js.map +1 -0
- package/dist/services/api/HulaApiClient.d.ts +170 -0
- package/dist/services/api/HulaApiClient.d.ts.map +1 -0
- package/dist/services/api/HulaApiClient.js +233 -0
- package/dist/services/api/HulaApiClient.js.map +1 -0
- package/dist/services/diff/DiffService.d.ts +44 -0
- package/dist/services/diff/DiffService.d.ts.map +1 -0
- package/dist/services/diff/DiffService.js +126 -0
- package/dist/services/diff/DiffService.js.map +1 -0
- package/dist/services/editor/EditorService.d.ts +53 -0
- package/dist/services/editor/EditorService.d.ts.map +1 -0
- package/dist/services/editor/EditorService.js +161 -0
- package/dist/services/editor/EditorService.js.map +1 -0
- package/dist/services/git/GitService.d.ts +124 -0
- package/dist/services/git/GitService.d.ts.map +1 -0
- package/dist/services/git/GitService.js +423 -0
- package/dist/services/git/GitService.js.map +1 -0
- package/dist/services/git/WorktreeService.d.ts +144 -0
- package/dist/services/git/WorktreeService.d.ts.map +1 -0
- package/dist/services/git/WorktreeService.js +505 -0
- package/dist/services/git/WorktreeService.js.map +1 -0
- package/dist/services/github/ActionsService.d.ts +66 -0
- package/dist/services/github/ActionsService.d.ts.map +1 -0
- package/dist/services/github/ActionsService.js +114 -0
- package/dist/services/github/ActionsService.js.map +1 -0
- package/dist/services/github/AssetUploadService.d.ts +103 -0
- package/dist/services/github/AssetUploadService.d.ts.map +1 -0
- package/dist/services/github/AssetUploadService.js +299 -0
- package/dist/services/github/AssetUploadService.js.map +1 -0
- package/dist/services/github/BatchCopilotDetectionService.d.ts +58 -0
- package/dist/services/github/BatchCopilotDetectionService.d.ts.map +1 -0
- package/dist/services/github/BatchCopilotDetectionService.js +321 -0
- package/dist/services/github/BatchCopilotDetectionService.js.map +1 -0
- package/dist/services/github/CopilotDetectionService.d.ts +40 -0
- package/dist/services/github/CopilotDetectionService.d.ts.map +1 -0
- package/dist/services/github/CopilotDetectionService.js +280 -0
- package/dist/services/github/CopilotDetectionService.js.map +1 -0
- package/dist/services/github/CopilotService.d.ts +27 -0
- package/dist/services/github/CopilotService.d.ts.map +1 -0
- package/dist/services/github/CopilotService.js +249 -0
- package/dist/services/github/CopilotService.js.map +1 -0
- package/dist/services/github/DeploymentDetectionService.d.ts +38 -0
- package/dist/services/github/DeploymentDetectionService.d.ts.map +1 -0
- package/dist/services/github/DeploymentDetectionService.js +104 -0
- package/dist/services/github/DeploymentDetectionService.js.map +1 -0
- package/dist/services/github/GithubAppService.d.ts +40 -0
- package/dist/services/github/GithubAppService.d.ts.map +1 -0
- package/dist/services/github/GithubAppService.js +187 -0
- package/dist/services/github/GithubAppService.js.map +1 -0
- package/dist/services/github/IssueService.d.ts +65 -0
- package/dist/services/github/IssueService.d.ts.map +1 -0
- package/dist/services/github/IssueService.js +231 -0
- package/dist/services/github/IssueService.js.map +1 -0
- package/dist/services/github/LabelService.d.ts +36 -0
- package/dist/services/github/LabelService.d.ts.map +1 -0
- package/dist/services/github/LabelService.js +122 -0
- package/dist/services/github/LabelService.js.map +1 -0
- package/dist/services/github/PRService.d.ts +77 -0
- package/dist/services/github/PRService.d.ts.map +1 -0
- package/dist/services/github/PRService.js +287 -0
- package/dist/services/github/PRService.js.map +1 -0
- package/dist/services/github/ProjectService.d.ts +144 -0
- package/dist/services/github/ProjectService.d.ts.map +1 -0
- package/dist/services/github/ProjectService.js +804 -0
- package/dist/services/github/ProjectService.js.map +1 -0
- package/dist/services/hooks/HookExecutor.d.ts +66 -0
- package/dist/services/hooks/HookExecutor.d.ts.map +1 -0
- package/dist/services/hooks/HookExecutor.js +227 -0
- package/dist/services/hooks/HookExecutor.js.map +1 -0
- package/dist/services/hooks/index.d.ts +2 -0
- package/dist/services/hooks/index.d.ts.map +1 -0
- package/dist/services/hooks/index.js +2 -0
- package/dist/services/hooks/index.js.map +1 -0
- package/dist/services/logs/LogFormatterService.d.ts +17 -0
- package/dist/services/logs/LogFormatterService.d.ts.map +1 -0
- package/dist/services/logs/LogFormatterService.js +35 -0
- package/dist/services/logs/LogFormatterService.js.map +1 -0
- package/dist/services/logs/TempFileService.d.ts +27 -0
- package/dist/services/logs/TempFileService.d.ts.map +1 -0
- package/dist/services/logs/TempFileService.js +90 -0
- package/dist/services/logs/TempFileService.js.map +1 -0
- package/dist/services/logs/index.d.ts +3 -0
- package/dist/services/logs/index.d.ts.map +1 -0
- package/dist/services/logs/index.js +4 -0
- package/dist/services/logs/index.js.map +1 -0
- package/dist/services/plan/PlanService.d.ts +70 -0
- package/dist/services/plan/PlanService.d.ts.map +1 -0
- package/dist/services/plan/PlanService.js +211 -0
- package/dist/services/plan/PlanService.js.map +1 -0
- package/dist/services/polling/GitHubDirectPollingAdapter.d.ts +16 -0
- package/dist/services/polling/GitHubDirectPollingAdapter.d.ts.map +1 -0
- package/dist/services/polling/GitHubDirectPollingAdapter.js +87 -0
- package/dist/services/polling/GitHubDirectPollingAdapter.js.map +1 -0
- package/dist/services/polling/HulaServerPollingAdapter.d.ts +23 -0
- package/dist/services/polling/HulaServerPollingAdapter.d.ts.map +1 -0
- package/dist/services/polling/HulaServerPollingAdapter.js +78 -0
- package/dist/services/polling/HulaServerPollingAdapter.js.map +1 -0
- package/dist/services/polling/IStatusPollingAdapter.d.ts +29 -0
- package/dist/services/polling/IStatusPollingAdapter.d.ts.map +1 -0
- package/dist/services/polling/IStatusPollingAdapter.js +2 -0
- package/dist/services/polling/IStatusPollingAdapter.js.map +1 -0
- package/dist/services/polling/StatusPollingAdapterFactory.d.ts +14 -0
- package/dist/services/polling/StatusPollingAdapterFactory.d.ts.map +1 -0
- package/dist/services/polling/StatusPollingAdapterFactory.js +41 -0
- package/dist/services/polling/StatusPollingAdapterFactory.js.map +1 -0
- package/dist/services/polling/index.d.ts +5 -0
- package/dist/services/polling/index.d.ts.map +1 -0
- package/dist/services/polling/index.js +5 -0
- package/dist/services/polling/index.js.map +1 -0
- package/dist/services/preview/PreviewService.d.ts +86 -0
- package/dist/services/preview/PreviewService.d.ts.map +1 -0
- package/dist/services/preview/PreviewService.js +439 -0
- package/dist/services/preview/PreviewService.js.map +1 -0
- package/dist/services/tracking/ProjectTrackingAdapter.d.ts +41 -0
- package/dist/services/tracking/ProjectTrackingAdapter.d.ts.map +1 -0
- package/dist/services/tracking/ProjectTrackingAdapter.js +230 -0
- package/dist/services/tracking/ProjectTrackingAdapter.js.map +1 -0
- package/dist/services/tracking/RemoteTrackingAdapter.d.ts +62 -0
- package/dist/services/tracking/RemoteTrackingAdapter.d.ts.map +1 -0
- package/dist/services/tracking/RemoteTrackingAdapter.js +242 -0
- package/dist/services/tracking/RemoteTrackingAdapter.js.map +1 -0
- package/dist/services/tracking/TrackingAdapterFactory.d.ts +25 -0
- package/dist/services/tracking/TrackingAdapterFactory.d.ts.map +1 -0
- package/dist/services/tracking/TrackingAdapterFactory.js +55 -0
- package/dist/services/tracking/TrackingAdapterFactory.js.map +1 -0
- package/dist/services/tracking/TrackingService.d.ts +104 -0
- package/dist/services/tracking/TrackingService.d.ts.map +1 -0
- package/dist/services/tracking/TrackingService.js +256 -0
- package/dist/services/tracking/TrackingService.js.map +1 -0
- package/dist/services/tracking/UntrackedIssuesService.d.ts +20 -0
- package/dist/services/tracking/UntrackedIssuesService.d.ts.map +1 -0
- package/dist/services/tracking/UntrackedIssuesService.js +148 -0
- package/dist/services/tracking/UntrackedIssuesService.js.map +1 -0
- package/dist/services/tracking/local-file-migration.d.ts +16 -0
- package/dist/services/tracking/local-file-migration.d.ts.map +1 -0
- package/dist/services/tracking/local-file-migration.js +86 -0
- package/dist/services/tracking/local-file-migration.js.map +1 -0
- package/dist/templates/planning-instructions.md +752 -0
- package/dist/templates/proceed-instructions.md +453 -0
- package/dist/templates/scripts/hula-fix-commit.sh +110 -0
- package/dist/templates/scripts/hula-fix-setup.sh +145 -0
- package/dist/templates/scripts/hula-launch-run.sh +89 -0
- package/dist/templates/scripts/hula-merge-local.sh +138 -0
- package/dist/templates/scripts/hula-merge-remote.sh +74 -0
- package/dist/templates/scripts/hula-read-config.sh +38 -0
- package/dist/templates/scripts/hula-verify-gather.sh +135 -0
- package/dist/templates/scripts/hula-verify-post.sh +84 -0
- package/dist/templates/skills/hula-confirm/SKILL.md +361 -0
- package/dist/templates/skills/hula-create/SKILL.md +211 -0
- package/dist/templates/skills/hula-fix/SKILL.md +224 -0
- package/dist/templates/skills/hula-launch/SKILL.md +159 -0
- package/dist/templates/skills/hula-log/SKILL.md +105 -0
- package/dist/templates/skills/hula-merge/SKILL.md +387 -0
- package/dist/templates/skills/hula-plan/SKILL.md +148 -0
- package/dist/templates/skills/hula-upload/SKILL.md +115 -0
- package/dist/templates/skills/hula-verify/SKILL.md +754 -0
- package/dist/types/common.schema.d.ts +46 -0
- package/dist/types/common.schema.d.ts.map +1 -0
- package/dist/types/common.schema.js +60 -0
- package/dist/types/common.schema.js.map +1 -0
- package/dist/types/config.schema.d.ts +443 -0
- package/dist/types/config.schema.d.ts.map +1 -0
- package/dist/types/config.schema.js +126 -0
- package/dist/types/config.schema.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/issue.schema.d.ts +136 -0
- package/dist/types/issue.schema.d.ts.map +1 -0
- package/dist/types/issue.schema.js +49 -0
- package/dist/types/issue.schema.js.map +1 -0
- package/dist/types/pr.schema.d.ts +118 -0
- package/dist/types/pr.schema.d.ts.map +1 -0
- package/dist/types/pr.schema.js +40 -0
- package/dist/types/pr.schema.js.map +1 -0
- package/dist/types/tracking.schema.d.ts +340 -0
- package/dist/types/tracking.schema.d.ts.map +1 -0
- package/dist/types/tracking.schema.js +56 -0
- package/dist/types/tracking.schema.js.map +1 -0
- package/dist/utils/browser-launcher.d.ts +60 -0
- package/dist/utils/browser-launcher.d.ts.map +1 -0
- package/dist/utils/browser-launcher.js +263 -0
- package/dist/utils/browser-launcher.js.map +1 -0
- package/dist/utils/cache.d.ts +44 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +94 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/config-parser.d.ts +16 -0
- package/dist/utils/config-parser.d.ts.map +1 -0
- package/dist/utils/config-parser.js +210 -0
- package/dist/utils/config-parser.js.map +1 -0
- package/dist/utils/editor.d.ts +21 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +213 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/git-utils.d.ts +5 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +18 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/github-cli.d.ts +62 -0
- package/dist/utils/github-cli.d.ts.map +1 -0
- package/dist/utils/github-cli.js +492 -0
- package/dist/utils/github-cli.js.map +1 -0
- package/dist/utils/logger.d.ts +45 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +118 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/open-url.d.ts +19 -0
- package/dist/utils/open-url.d.ts.map +1 -0
- package/dist/utils/open-url.js +37 -0
- package/dist/utils/open-url.js.map +1 -0
- package/dist/utils/project-resolver.d.ts +13 -0
- package/dist/utils/project-resolver.d.ts.map +1 -0
- package/dist/utils/project-resolver.js +35 -0
- package/dist/utils/project-resolver.js.map +1 -0
- package/dist/utils/prompts.d.ts +80 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +326 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/shell.d.ts +54 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +152 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/validators.d.ts +32 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +64 -0
- package/dist/utils/validators.js.map +1 -0
- 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"}
|