@phantom-pm/integrations 1.1.0-beta.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.
@@ -0,0 +1,57 @@
1
+ export interface GitHubConfig {
2
+ clientId: string;
3
+ clientSecret: string;
4
+ accessToken?: string;
5
+ refreshToken?: string;
6
+ expiresAt?: string;
7
+ scope?: string;
8
+ }
9
+ export interface GitHubUser {
10
+ id: number;
11
+ login: string;
12
+ name?: string;
13
+ email?: string;
14
+ avatar_url: string;
15
+ }
16
+ export interface GitHubRepo {
17
+ id: number;
18
+ name: string;
19
+ full_name: string;
20
+ description: string;
21
+ private: boolean;
22
+ html_url: string;
23
+ clone_url: string;
24
+ default_branch: string;
25
+ }
26
+ export interface GitHubIssue {
27
+ id: number;
28
+ number: number;
29
+ title: string;
30
+ body: string;
31
+ state: 'open' | 'closed';
32
+ labels: Array<{
33
+ name: string;
34
+ color: string;
35
+ }>;
36
+ created_at: string;
37
+ updated_at: string;
38
+ }
39
+ export declare class GitHubIntegration {
40
+ private config;
41
+ private readonly redirectUri;
42
+ constructor(config?: Partial<GitHubConfig>);
43
+ authenticate(): Promise<string>;
44
+ private isTokenValid;
45
+ private startOAuthFlow;
46
+ private exchangeCodeForToken;
47
+ private saveToken;
48
+ getUser(): Promise<GitHubUser>;
49
+ getRepos(org?: string): Promise<GitHubRepo[]>;
50
+ getIssues(repo: string, state?: 'open' | 'closed' | 'all'): Promise<GitHubIssue[]>;
51
+ createIssue(repo: string, title: string, body: string, labels?: string[]): Promise<GitHubIssue>;
52
+ cloneRepo(repo: string, targetDir: string): Promise<void>;
53
+ createRepo(name: string, description: string, isPrivate?: boolean): Promise<GitHubRepo>;
54
+ syncContextFromRepo(repo: string, targetPath: string): Promise<void>;
55
+ disconnect(): void;
56
+ }
57
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;gBAE7D,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IASxC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAUrC,OAAO,CAAC,YAAY;YAMN,cAAc;YA6Ed,oBAAoB;IAmClC,OAAO,CAAC,SAAS;IAyBX,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IAiB9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAqB7C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,KAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmB1F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BnG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IA0B9F,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1E,UAAU,IAAI,IAAI;CAqBnB"}
package/dist/github.js ADDED
@@ -0,0 +1,278 @@
1
+ // PHANTOM GitHub Integration - Real OAuth + API Integration
2
+ import { randomBytes } from 'crypto';
3
+ import { createServer } from 'http';
4
+ import { URL } from 'url';
5
+ import open from 'open';
6
+ import { existsSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { getConfig } from '../../core/dist/config.js';
9
+ export class GitHubIntegration {
10
+ config;
11
+ redirectUri = 'http://localhost:0/auth/github/callback'; // Port 0 = random available port
12
+ constructor(config = {}) {
13
+ this.config = {
14
+ clientId: process.env.GITHUB_CLIENT_ID || '',
15
+ clientSecret: process.env.GITHUB_CLIENT_SECRET || '',
16
+ scope: 'repo,user',
17
+ ...config,
18
+ };
19
+ }
20
+ async authenticate() {
21
+ // Check for existing token
22
+ if (this.config.accessToken && this.isTokenValid()) {
23
+ return this.config.accessToken;
24
+ }
25
+ // Start OAuth flow
26
+ return this.startOAuthFlow();
27
+ }
28
+ isTokenValid() {
29
+ if (!this.config.expiresAt)
30
+ return false;
31
+ const expiresAt = new Date(this.config.expiresAt);
32
+ return expiresAt > new Date();
33
+ }
34
+ async startOAuthFlow() {
35
+ const state = randomBytes(16).toString('hex');
36
+ const authUrl = new URL('https://github.com/login/oauth/authorize');
37
+ authUrl.searchParams.set('client_id', this.config.clientId);
38
+ authUrl.searchParams.set('redirect_uri', this.redirectUri);
39
+ authUrl.searchParams.set('scope', this.config.scope || 'repo');
40
+ authUrl.searchParams.set('state', state);
41
+ authUrl.searchParams.set('allow_signup', 'true');
42
+ console.log('Opening GitHub OAuth in browser...');
43
+ await open(authUrl.toString());
44
+ return new Promise((resolve, reject) => {
45
+ const server = createServer(async (req, res) => {
46
+ const url = new URL(req.url, `http://${req.headers.host}`);
47
+ if (url.pathname === '/auth/github/callback') {
48
+ const code = url.searchParams.get('code');
49
+ const error = url.searchParams.get('error');
50
+ const returnedState = url.searchParams.get('state');
51
+ if (error) {
52
+ res.writeHead(400, { 'Content-Type': 'text/html' });
53
+ res.end(`<h1>Authorization failed: ${error}</h1>`);
54
+ server.close();
55
+ reject(new Error(`GitHub OAuth error: ${error}`));
56
+ return;
57
+ }
58
+ if (!code || returnedState !== state) {
59
+ res.writeHead(400, { 'Content-Type': 'text/html' });
60
+ res.end('<h1>Invalid OAuth response</h1>');
61
+ server.close();
62
+ reject(new Error('Invalid OAuth response'));
63
+ return;
64
+ }
65
+ try {
66
+ const token = await this.exchangeCodeForToken(code);
67
+ res.writeHead(200, { 'Content-Type': 'text/html' });
68
+ res.end('<h1>Success! You can close this window and return to PHANTOM.</h1>');
69
+ server.close();
70
+ resolve(token);
71
+ }
72
+ catch (err) {
73
+ res.writeHead(500, { 'Content-Type': 'text/html' });
74
+ res.end(`<h1>Token exchange failed: ${err instanceof Error ? err.message : 'Unknown error'}</h1>`);
75
+ server.close();
76
+ reject(err);
77
+ }
78
+ }
79
+ else {
80
+ res.writeHead(404);
81
+ res.end();
82
+ }
83
+ });
84
+ server.listen(0, () => {
85
+ const address = server.address();
86
+ if (address && typeof address !== 'string') {
87
+ const port = address.port;
88
+ console.log(`OAuth server listening on http://localhost:${port}`);
89
+ // Update redirect URI
90
+ const updatedAuthUrl = new URL(authUrl.toString());
91
+ updatedAuthUrl.searchParams.set('redirect_uri', `http://localhost:${port}/auth/github/callback`);
92
+ console.log('Opening updated URL in browser...');
93
+ open(updatedAuthUrl.toString());
94
+ }
95
+ });
96
+ // Timeout after 5 minutes
97
+ setTimeout(() => {
98
+ server.close();
99
+ reject(new Error('OAuth flow timeout'));
100
+ }, 5 * 60 * 1000);
101
+ });
102
+ }
103
+ async exchangeCodeForToken(code) {
104
+ const response = await fetch('https://github.com/login/oauth/access_token', {
105
+ method: 'POST',
106
+ headers: {
107
+ 'Content-Type': 'application/json',
108
+ 'Accept': 'application/json',
109
+ },
110
+ body: JSON.stringify({
111
+ client_id: this.config.clientId,
112
+ client_secret: this.config.clientSecret,
113
+ code,
114
+ redirect_uri: this.redirectUri,
115
+ }),
116
+ });
117
+ if (!response.ok) {
118
+ throw new Error(`Token exchange failed: ${response.statusText}`);
119
+ }
120
+ const data = await response.json();
121
+ if (data.error) {
122
+ throw new Error(`GitHub error: ${data.error_description || data.error}`);
123
+ }
124
+ this.config.accessToken = data.access_token;
125
+ this.config.refreshToken = data.refresh_token;
126
+ this.config.expiresAt = new Date(Date.now() + (data.expires_in * 1000)).toISOString();
127
+ // Save token to config
128
+ this.saveToken();
129
+ return data.access_token;
130
+ }
131
+ saveToken() {
132
+ const cfg = getConfig().get();
133
+ const existing = cfg.integrations.find(i => i.name === 'github');
134
+ const updatedIntegration = {
135
+ name: 'github',
136
+ connected: true,
137
+ lastConnectedAt: new Date().toISOString(),
138
+ config: {
139
+ target: 'github',
140
+ configured_at: new Date().toISOString(),
141
+ access_token: this.config.accessToken || '',
142
+ refresh_token: this.config.refreshToken || '',
143
+ expires_at: this.config.expiresAt || '',
144
+ scope: this.config.scope || '',
145
+ },
146
+ };
147
+ const nextIntegrations = existing
148
+ ? cfg.integrations.map(i => i.name === 'github' ? { ...i, ...updatedIntegration } : i)
149
+ : [...cfg.integrations, updatedIntegration];
150
+ getConfig().set('integrations', nextIntegrations);
151
+ }
152
+ async getUser() {
153
+ const token = await this.authenticate();
154
+ const response = await fetch('https://api.github.com/user', {
155
+ headers: {
156
+ 'Authorization': `Bearer ${token}`,
157
+ 'Accept': 'application/vnd.github.v3+json',
158
+ 'User-Agent': 'PHANTOM-PM',
159
+ },
160
+ });
161
+ if (!response.ok) {
162
+ throw new Error(`GitHub API error: ${response.statusText}`);
163
+ }
164
+ return response.json();
165
+ }
166
+ async getRepos(org) {
167
+ const token = await this.authenticate();
168
+ const url = org
169
+ ? `https://api.github.com/orgs/${org}/repos`
170
+ : 'https://api.github.com/user/repos';
171
+ const response = await fetch(url, {
172
+ headers: {
173
+ 'Authorization': `Bearer ${token}`,
174
+ 'Accept': 'application/vnd.github.v3+json',
175
+ 'User-Agent': 'PHANTOM-PM',
176
+ },
177
+ });
178
+ if (!response.ok) {
179
+ throw new Error(`GitHub API error: ${response.statusText}`);
180
+ }
181
+ return response.json();
182
+ }
183
+ async getIssues(repo, state = 'open') {
184
+ const token = await this.authenticate();
185
+ const [owner, repoName] = repo.split('/');
186
+ const response = await fetch(`https://api.github.com/repos/${owner}/${repoName}/issues?state=${state}`, {
187
+ headers: {
188
+ 'Authorization': `Bearer ${token}`,
189
+ 'Accept': 'application/vnd.github.v3+json',
190
+ 'User-Agent': 'PHANTOM-PM',
191
+ },
192
+ });
193
+ if (!response.ok) {
194
+ throw new Error(`GitHub API error: ${response.statusText}`);
195
+ }
196
+ return response.json();
197
+ }
198
+ async createIssue(repo, title, body, labels = []) {
199
+ const token = await this.authenticate();
200
+ const [owner, repoName] = repo.split('/');
201
+ const response = await fetch(`https://api.github.com/repos/${owner}/${repoName}/issues`, {
202
+ method: 'POST',
203
+ headers: {
204
+ 'Authorization': `Bearer ${token}`,
205
+ 'Accept': 'application/vnd.github.v3+json',
206
+ 'Content-Type': 'application/json',
207
+ 'User-Agent': 'PHANTOM-PM',
208
+ },
209
+ body: JSON.stringify({
210
+ title,
211
+ body,
212
+ labels,
213
+ }),
214
+ });
215
+ if (!response.ok) {
216
+ throw new Error(`GitHub API error: ${response.statusText}`);
217
+ }
218
+ return response.json();
219
+ }
220
+ async cloneRepo(repo, targetDir) {
221
+ const token = await this.authenticate();
222
+ const cloneUrl = `https://${token}@github.com/${repo}.git`;
223
+ // Use git CLI to clone
224
+ const { execSync } = await import('child_process');
225
+ execSync(`git clone ${cloneUrl} ${targetDir}`, { stdio: 'inherit' });
226
+ }
227
+ async createRepo(name, description, isPrivate = false) {
228
+ const token = await this.authenticate();
229
+ const response = await fetch('https://api.github.com/user/repos', {
230
+ method: 'POST',
231
+ headers: {
232
+ 'Authorization': `Bearer ${token}`,
233
+ 'Accept': 'application/vnd.github.v3+json',
234
+ 'Content-Type': 'application/json',
235
+ 'User-Agent': 'PHANTOM-PM',
236
+ },
237
+ body: JSON.stringify({
238
+ name,
239
+ description,
240
+ private: isPrivate,
241
+ auto_init: true,
242
+ }),
243
+ });
244
+ if (!response.ok) {
245
+ throw new Error(`GitHub API error: ${response.statusText}`);
246
+ }
247
+ return response.json();
248
+ }
249
+ async syncContextFromRepo(repo, targetPath) {
250
+ // Clone repo if not already cloned
251
+ if (!existsSync(join(targetPath, '.git'))) {
252
+ await this.cloneRepo(repo, targetPath);
253
+ }
254
+ // Add to PHANTOM context
255
+ const { getContextEngine } = await import('../../core/dist/context.js');
256
+ const context = getContextEngine();
257
+ await context.addPath(targetPath);
258
+ }
259
+ disconnect() {
260
+ const cfg = getConfig().get();
261
+ const updated = cfg.integrations.map(i => i.name === 'github'
262
+ ? {
263
+ ...i,
264
+ connected: false,
265
+ config: {
266
+ ...i.config,
267
+ access_token: i.config.access_token || '',
268
+ configured_at: i.config.configured_at || new Date().toISOString()
269
+ }
270
+ }
271
+ : i);
272
+ getConfig().set('integrations', updated);
273
+ this.config.accessToken = undefined;
274
+ this.config.refreshToken = undefined;
275
+ this.config.expiresAt = undefined;
276
+ }
277
+ }
278
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@phantom-pm/integrations",
3
+ "version": "1.1.0-beta.1",
4
+ "description": "PHANTOM real integrations - GitHub, Figma, Linear, Slack",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "dev": "tsc --watch"
11
+ },
12
+ "dependencies": {
13
+ "@phantom-pm/core": "file:../core",
14
+ "open": "^10.1.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^20.0.0",
18
+ "typescript": "^5.0.0"
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ]
23
+ }