@braingrid/cli 0.2.0 → 0.2.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.
- package/CHANGELOG.md +32 -0
- package/README.md +54 -38
- package/dist/chunk-KNVWIF3L.js +401 -0
- package/dist/chunk-KNVWIF3L.js.map +1 -0
- package/dist/cli.js +6236 -245
- package/dist/cli.js.map +1 -1
- package/dist/gh-installer-B65ZOOC4.js +13 -0
- package/dist/gh-installer-B65ZOOC4.js.map +1 -0
- package/package.json +19 -11
- package/dist/build-config.d.ts +0 -26
- package/dist/build-config.d.ts.map +0 -1
- package/dist/build-config.js +0 -45
- package/dist/build-config.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/handlers/auth.handlers.d.ts +0 -13
- package/dist/handlers/auth.handlers.d.ts.map +0 -1
- package/dist/handlers/auth.handlers.js +0 -111
- package/dist/handlers/auth.handlers.js.map +0 -1
- package/dist/handlers/index.d.ts +0 -13
- package/dist/handlers/index.d.ts.map +0 -1
- package/dist/handlers/index.js +0 -13
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/init.handlers.d.ts +0 -10
- package/dist/handlers/init.handlers.d.ts.map +0 -1
- package/dist/handlers/init.handlers.js +0 -638
- package/dist/handlers/init.handlers.js.map +0 -1
- package/dist/handlers/project.handlers.d.ts +0 -36
- package/dist/handlers/project.handlers.d.ts.map +0 -1
- package/dist/handlers/project.handlers.js +0 -309
- package/dist/handlers/project.handlers.js.map +0 -1
- package/dist/handlers/requirement.handlers.d.ts +0 -32
- package/dist/handlers/requirement.handlers.d.ts.map +0 -1
- package/dist/handlers/requirement.handlers.js +0 -264
- package/dist/handlers/requirement.handlers.js.map +0 -1
- package/dist/handlers/status.handlers.d.ts +0 -12
- package/dist/handlers/status.handlers.d.ts.map +0 -1
- package/dist/handlers/status.handlers.js +0 -212
- package/dist/handlers/status.handlers.js.map +0 -1
- package/dist/handlers/task.handlers.d.ts +0 -29
- package/dist/handlers/task.handlers.d.ts.map +0 -1
- package/dist/handlers/task.handlers.js +0 -326
- package/dist/handlers/task.handlers.js.map +0 -1
- package/dist/handlers/types.d.ts +0 -10
- package/dist/handlers/types.d.ts.map +0 -1
- package/dist/handlers/types.js +0 -5
- package/dist/handlers/types.js.map +0 -1
- package/dist/handlers/update.handlers.d.ts +0 -16
- package/dist/handlers/update.handlers.d.ts.map +0 -1
- package/dist/handlers/update.handlers.js +0 -119
- package/dist/handlers/update.handlers.js.map +0 -1
- package/dist/services/auth.d.ts +0 -59
- package/dist/services/auth.d.ts.map +0 -1
- package/dist/services/auth.js +0 -549
- package/dist/services/auth.js.map +0 -1
- package/dist/services/claude.d.ts +0 -18
- package/dist/services/claude.d.ts.map +0 -1
- package/dist/services/claude.js +0 -164
- package/dist/services/claude.js.map +0 -1
- package/dist/services/credential-store.d.ts +0 -47
- package/dist/services/credential-store.d.ts.map +0 -1
- package/dist/services/credential-store.js +0 -89
- package/dist/services/credential-store.js.map +0 -1
- package/dist/services/internal/github-service.d.ts +0 -67
- package/dist/services/internal/github-service.d.ts.map +0 -1
- package/dist/services/internal/github-service.js +0 -81
- package/dist/services/internal/github-service.js.map +0 -1
- package/dist/services/internal/repository-service.d.ts +0 -79
- package/dist/services/internal/repository-service.d.ts.map +0 -1
- package/dist/services/internal/repository-service.js +0 -88
- package/dist/services/internal/repository-service.js.map +0 -1
- package/dist/services/oauth2-auth.d.ts +0 -76
- package/dist/services/oauth2-auth.d.ts.map +0 -1
- package/dist/services/oauth2-auth.js +0 -451
- package/dist/services/oauth2-auth.js.map +0 -1
- package/dist/services/project-service.d.ts +0 -24
- package/dist/services/project-service.d.ts.map +0 -1
- package/dist/services/project-service.js +0 -60
- package/dist/services/project-service.js.map +0 -1
- package/dist/services/requirement-service.d.ts +0 -32
- package/dist/services/requirement-service.d.ts.map +0 -1
- package/dist/services/requirement-service.js +0 -91
- package/dist/services/requirement-service.js.map +0 -1
- package/dist/services/task-service.d.ts +0 -22
- package/dist/services/task-service.d.ts.map +0 -1
- package/dist/services/task-service.js +0 -52
- package/dist/services/task-service.js.map +0 -1
- package/dist/types/api.d.ts +0 -16
- package/dist/types/api.d.ts.map +0 -1
- package/dist/types/api.js +0 -5
- package/dist/types/api.js.map +0 -1
- package/dist/types/auth.d.ts +0 -73
- package/dist/types/auth.d.ts.map +0 -1
- package/dist/types/auth.js +0 -2
- package/dist/types/auth.js.map +0 -1
- package/dist/types/claude.d.ts +0 -22
- package/dist/types/claude.d.ts.map +0 -1
- package/dist/types/claude.js +0 -2
- package/dist/types/claude.js.map +0 -1
- package/dist/types/github.d.ts +0 -105
- package/dist/types/github.d.ts.map +0 -1
- package/dist/types/github.js +0 -6
- package/dist/types/github.js.map +0 -1
- package/dist/types/local-project.d.ts +0 -30
- package/dist/types/local-project.d.ts.map +0 -1
- package/dist/types/local-project.js +0 -24
- package/dist/types/local-project.js.map +0 -1
- package/dist/types/project.d.ts +0 -56
- package/dist/types/project.d.ts.map +0 -1
- package/dist/types/project.js +0 -5
- package/dist/types/project.js.map +0 -1
- package/dist/types/requirement.d.ts +0 -69
- package/dist/types/requirement.d.ts.map +0 -1
- package/dist/types/requirement.js +0 -5
- package/dist/types/requirement.js.map +0 -1
- package/dist/types/task.d.ts +0 -44
- package/dist/types/task.d.ts.map +0 -1
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -1
- package/dist/utils/axios-retry.d.ts +0 -25
- package/dist/utils/axios-retry.d.ts.map +0 -1
- package/dist/utils/axios-retry.js +0 -174
- package/dist/utils/axios-retry.js.map +0 -1
- package/dist/utils/axios-with-auth.d.ts +0 -10
- package/dist/utils/axios-with-auth.d.ts.map +0 -1
- package/dist/utils/axios-with-auth.js +0 -118
- package/dist/utils/axios-with-auth.js.map +0 -1
- package/dist/utils/cli-tools.d.ts +0 -30
- package/dist/utils/cli-tools.d.ts.map +0 -1
- package/dist/utils/cli-tools.js +0 -199
- package/dist/utils/cli-tools.js.map +0 -1
- package/dist/utils/command-execution.d.ts +0 -30
- package/dist/utils/command-execution.d.ts.map +0 -1
- package/dist/utils/command-execution.js +0 -264
- package/dist/utils/command-execution.js.map +0 -1
- package/dist/utils/command-parser.d.ts +0 -85
- package/dist/utils/command-parser.d.ts.map +0 -1
- package/dist/utils/command-parser.js +0 -287
- package/dist/utils/command-parser.js.map +0 -1
- package/dist/utils/config.d.ts +0 -10
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -77
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -17
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/dist/utils/error-formatter.js +0 -115
- package/dist/utils/error-formatter.js.map +0 -1
- package/dist/utils/formatting.d.ts +0 -10
- package/dist/utils/formatting.d.ts.map +0 -1
- package/dist/utils/formatting.js +0 -122
- package/dist/utils/formatting.js.map +0 -1
- package/dist/utils/gh-installer.d.ts +0 -31
- package/dist/utils/gh-installer.d.ts.map +0 -1
- package/dist/utils/gh-installer.js +0 -296
- package/dist/utils/gh-installer.js.map +0 -1
- package/dist/utils/git-installer.d.ts +0 -31
- package/dist/utils/git-installer.d.ts.map +0 -1
- package/dist/utils/git-installer.js +0 -290
- package/dist/utils/git-installer.js.map +0 -1
- package/dist/utils/git.d.ts +0 -60
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -144
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/github-repo.d.ts +0 -43
- package/dist/utils/github-repo.d.ts.map +0 -1
- package/dist/utils/github-repo.js +0 -113
- package/dist/utils/github-repo.js.map +0 -1
- package/dist/utils/id-normalization.d.ts +0 -26
- package/dist/utils/id-normalization.d.ts.map +0 -1
- package/dist/utils/id-normalization.js +0 -45
- package/dist/utils/id-normalization.js.map +0 -1
- package/dist/utils/jwt.d.ts +0 -45
- package/dist/utils/jwt.d.ts.map +0 -1
- package/dist/utils/jwt.js +0 -64
- package/dist/utils/jwt.js.map +0 -1
- package/dist/utils/local-store.d.ts +0 -36
- package/dist/utils/local-store.d.ts.map +0 -1
- package/dist/utils/local-store.js +0 -94
- package/dist/utils/local-store.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -176
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/package-manager-installer.d.ts +0 -36
- package/dist/utils/package-manager-installer.d.ts.map +0 -1
- package/dist/utils/package-manager-installer.js +0 -106
- package/dist/utils/package-manager-installer.js.map +0 -1
- package/dist/utils/package-manager.d.ts +0 -31
- package/dist/utils/package-manager.d.ts.map +0 -1
- package/dist/utils/package-manager.js +0 -133
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/projects.d.ts +0 -23
- package/dist/utils/projects.d.ts.map +0 -1
- package/dist/utils/projects.js +0 -36
- package/dist/utils/projects.js.map +0 -1
- package/dist/utils/repository-access.d.ts +0 -89
- package/dist/utils/repository-access.d.ts.map +0 -1
- package/dist/utils/repository-access.js +0 -132
- package/dist/utils/repository-access.js.map +0 -1
- package/dist/utils/requirements.d.ts +0 -43
- package/dist/utils/requirements.d.ts.map +0 -1
- package/dist/utils/requirements.js +0 -79
- package/dist/utils/requirements.js.map +0 -1
- package/dist/utils/spinner.d.ts +0 -47
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js +0 -101
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/status-parser.d.ts +0 -95
- package/dist/utils/status-parser.d.ts.map +0 -1
- package/dist/utils/status-parser.js +0 -205
- package/dist/utils/status-parser.js.map +0 -1
- package/dist/utils/tasks.d.ts +0 -21
- package/dist/utils/tasks.d.ts.map +0 -1
- package/dist/utils/tasks.js +0 -63
- package/dist/utils/tasks.js.map +0 -1
- package/dist/utils/workspace-manager.d.ts +0 -65
- package/dist/utils/workspace-manager.d.ts.map +0 -1
- package/dist/utils/workspace-manager.js +0 -98
- package/dist/utils/workspace-manager.js.map +0 -1
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
export interface OAuth2AuthResult {
|
|
2
|
-
accessToken: string;
|
|
3
|
-
refreshToken?: string;
|
|
4
|
-
idToken?: string;
|
|
5
|
-
expiresIn?: number;
|
|
6
|
-
tokenType?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface OAuth2AuthUrlResult {
|
|
9
|
-
authUrl: string;
|
|
10
|
-
redirectUri: string;
|
|
11
|
-
state: string;
|
|
12
|
-
}
|
|
13
|
-
export declare class OAuth2Handler {
|
|
14
|
-
private abortController?;
|
|
15
|
-
private onAuthCodeReceived?;
|
|
16
|
-
private server?;
|
|
17
|
-
private authorizationCode?;
|
|
18
|
-
private authError?;
|
|
19
|
-
private state?;
|
|
20
|
-
private pkceVerifier?;
|
|
21
|
-
/**
|
|
22
|
-
* Set callback for when auth URL is ready
|
|
23
|
-
*/
|
|
24
|
-
setAuthUrlCallback(callback: (authUrl: string) => void): void;
|
|
25
|
-
/**
|
|
26
|
-
* Generate PKCE challenge for OAuth2 flow
|
|
27
|
-
*/
|
|
28
|
-
private generatePKCEChallenge;
|
|
29
|
-
/**
|
|
30
|
-
* Generate a cryptographically secure state parameter
|
|
31
|
-
*/
|
|
32
|
-
private generateState;
|
|
33
|
-
/**
|
|
34
|
-
* Get the fixed port for the callback server
|
|
35
|
-
*/
|
|
36
|
-
private getCallbackPort;
|
|
37
|
-
/**
|
|
38
|
-
* Start local HTTP server to handle OAuth callback
|
|
39
|
-
*/
|
|
40
|
-
private startCallbackServer;
|
|
41
|
-
/**
|
|
42
|
-
* Build the authorization URL with PKCE parameters
|
|
43
|
-
*/
|
|
44
|
-
private buildAuthorizationUrl;
|
|
45
|
-
/**
|
|
46
|
-
* Exchange authorization code for tokens
|
|
47
|
-
*/
|
|
48
|
-
private exchangeCodeForTokens;
|
|
49
|
-
/**
|
|
50
|
-
* Wait for the authorization code from the callback
|
|
51
|
-
*/
|
|
52
|
-
private waitForAuthorizationCode;
|
|
53
|
-
/**
|
|
54
|
-
* Prepare OAuth2 flow and return auth URL (for RPC mode)
|
|
55
|
-
* Starts the callback server but doesn't open the browser
|
|
56
|
-
*/
|
|
57
|
-
prepareAuthUrl(): Promise<OAuth2AuthUrlResult>;
|
|
58
|
-
/**
|
|
59
|
-
* Complete the OAuth2 flow after browser authentication (for RPC mode)
|
|
60
|
-
* Call this after prepareAuthUrl() and the user has authenticated
|
|
61
|
-
*/
|
|
62
|
-
completeAuth(timeoutMs?: number): Promise<OAuth2AuthResult>;
|
|
63
|
-
/**
|
|
64
|
-
* Initiates the OAuth2 authorization code flow with PKCE
|
|
65
|
-
*/
|
|
66
|
-
authenticate(): Promise<OAuth2AuthResult>;
|
|
67
|
-
/**
|
|
68
|
-
* Refresh an access token using a refresh token
|
|
69
|
-
*/
|
|
70
|
-
refreshToken(refreshToken: string): Promise<OAuth2AuthResult>;
|
|
71
|
-
/**
|
|
72
|
-
* Abort any ongoing authentication
|
|
73
|
-
*/
|
|
74
|
-
abort(): void;
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=oauth2-auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2-auth.d.ts","sourceRoot":"","sources":["../../src/services/oauth2-auth.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,gBAAgB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACd;AAQD,qBAAa,aAAa;IACzB,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAC,CAA4B;IACvD,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,YAAY,CAAC,CAAS;IAE9B;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI7D;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;YACW,mBAAmB;IAyHjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;YACW,qBAAqB;IA+CnC;;OAEG;YACW,wBAAwB;IAqCtC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAuCpD;;;OAGG;IACG,YAAY,CAAC,SAAS,GAAE,MAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuCzE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAwE/C;;OAEG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4CnE;;OAEG;IACH,KAAK,IAAI,IAAI;CAWb"}
|
|
@@ -1,451 +0,0 @@
|
|
|
1
|
-
import { createHash, randomBytes } from 'crypto';
|
|
2
|
-
import { createServer } from 'http';
|
|
3
|
-
import open from 'open';
|
|
4
|
-
import axios, { AxiosError } from 'axios';
|
|
5
|
-
import { getConfig } from '../utils/config.js';
|
|
6
|
-
import { getLogger } from '../utils/logger.js';
|
|
7
|
-
const logger = getLogger();
|
|
8
|
-
export class OAuth2Handler {
|
|
9
|
-
/**
|
|
10
|
-
* Set callback for when auth URL is ready
|
|
11
|
-
*/
|
|
12
|
-
setAuthUrlCallback(callback) {
|
|
13
|
-
this.onAuthCodeReceived = callback;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Generate PKCE challenge for OAuth2 flow
|
|
17
|
-
*/
|
|
18
|
-
generatePKCEChallenge() {
|
|
19
|
-
// Generate a cryptographically secure random verifier (43-128 chars)
|
|
20
|
-
const verifier = randomBytes(32).toString('base64url');
|
|
21
|
-
// Create challenge from verifier using SHA256
|
|
22
|
-
const challenge = createHash('sha256').update(verifier).digest('base64url');
|
|
23
|
-
return {
|
|
24
|
-
verifier,
|
|
25
|
-
challenge,
|
|
26
|
-
method: 'S256',
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Generate a cryptographically secure state parameter
|
|
31
|
-
*/
|
|
32
|
-
generateState() {
|
|
33
|
-
return randomBytes(32).toString('base64url');
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Get the fixed port for the callback server
|
|
37
|
-
*/
|
|
38
|
-
getCallbackPort() {
|
|
39
|
-
// Use fixed port 34536 for OAuth callback
|
|
40
|
-
return 34536;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Start local HTTP server to handle OAuth callback
|
|
44
|
-
*/
|
|
45
|
-
async startCallbackServer(port) {
|
|
46
|
-
return new Promise(resolve => {
|
|
47
|
-
this.server = createServer((req, res) => {
|
|
48
|
-
const url = new URL(req.url || '', `http://127.0.0.1:${port}`);
|
|
49
|
-
// Handle OAuth callback
|
|
50
|
-
if (url.pathname === '/callback') {
|
|
51
|
-
const code = url.searchParams.get('code');
|
|
52
|
-
const error = url.searchParams.get('error');
|
|
53
|
-
const state = url.searchParams.get('state');
|
|
54
|
-
// Validate state parameter
|
|
55
|
-
if (state !== this.state) {
|
|
56
|
-
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
57
|
-
res.end(`
|
|
58
|
-
<html>
|
|
59
|
-
<body>
|
|
60
|
-
<h1>Authentication Failed</h1>
|
|
61
|
-
<p>Invalid state parameter. Please try again.</p>
|
|
62
|
-
<script>window.setTimeout(() => window.close(), 3000);</script>
|
|
63
|
-
</body>
|
|
64
|
-
</html>
|
|
65
|
-
`);
|
|
66
|
-
this.authError = 'Invalid state parameter';
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
if (error) {
|
|
70
|
-
// Handle error response
|
|
71
|
-
const errorDescription = url.searchParams.get('error_description') || 'Unknown error';
|
|
72
|
-
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
73
|
-
res.end(`
|
|
74
|
-
<html>
|
|
75
|
-
<body>
|
|
76
|
-
<h1>Authentication Failed</h1>
|
|
77
|
-
<p>${errorDescription}</p>
|
|
78
|
-
<script>window.setTimeout(() => window.close(), 3000);</script>
|
|
79
|
-
</body>
|
|
80
|
-
</html>
|
|
81
|
-
`);
|
|
82
|
-
this.authError = errorDescription;
|
|
83
|
-
}
|
|
84
|
-
else if (code) {
|
|
85
|
-
// Success! Store the code
|
|
86
|
-
this.authorizationCode = code;
|
|
87
|
-
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
88
|
-
res.end(`
|
|
89
|
-
<html>
|
|
90
|
-
<head>
|
|
91
|
-
<style>
|
|
92
|
-
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; display: flex; align-items: center; justify-content: center; height: 100vh; margin: 0; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); }
|
|
93
|
-
.container { background: white; padding: 2rem; border-radius: 10px; box-shadow: 0 10px 40px rgba(0,0,0,0.1); text-align: center; }
|
|
94
|
-
h1 { color: #2d3748; margin-bottom: 1rem; }
|
|
95
|
-
p { color: #718096; }
|
|
96
|
-
.success-icon { font-size: 3rem; margin-bottom: 1rem; }
|
|
97
|
-
</style>
|
|
98
|
-
</head>
|
|
99
|
-
<body>
|
|
100
|
-
<div class="container">
|
|
101
|
-
<div class="success-icon">✅</div>
|
|
102
|
-
<h1>Authentication Successful!</h1>
|
|
103
|
-
<p>You can now close this window and return to the CLI.</p>
|
|
104
|
-
<script>window.setTimeout(() => window.close(), 2000);</script>
|
|
105
|
-
</div>
|
|
106
|
-
</body>
|
|
107
|
-
</html>
|
|
108
|
-
`);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
// No code or error
|
|
112
|
-
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
113
|
-
res.end(`
|
|
114
|
-
<html>
|
|
115
|
-
<body>
|
|
116
|
-
<h1>Authentication Failed</h1>
|
|
117
|
-
<p>No authorization code received.</p>
|
|
118
|
-
<script>window.setTimeout(() => window.close(), 3000);</script>
|
|
119
|
-
</body>
|
|
120
|
-
</html>
|
|
121
|
-
`);
|
|
122
|
-
this.authError = 'No authorization code received';
|
|
123
|
-
}
|
|
124
|
-
// Close the server after handling the callback
|
|
125
|
-
setTimeout(() => {
|
|
126
|
-
if (this.server) {
|
|
127
|
-
this.server.close();
|
|
128
|
-
this.server = undefined;
|
|
129
|
-
}
|
|
130
|
-
}, 500);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
// Handle other routes (redirect to /callback or show waiting page)
|
|
134
|
-
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
135
|
-
res.end(`
|
|
136
|
-
<html>
|
|
137
|
-
<head>
|
|
138
|
-
<style>
|
|
139
|
-
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; display: flex; align-items: center; justify-content: center; height: 100vh; margin: 0; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); }
|
|
140
|
-
.container { background: white; padding: 2rem; border-radius: 10px; box-shadow: 0 10px 40px rgba(0,0,0,0.1); text-align: center; }
|
|
141
|
-
h1 { color: #2d3748; }
|
|
142
|
-
.spinner { border: 3px solid #f3f4f6; border-top: 3px solid #667eea; border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; margin: 1rem auto; }
|
|
143
|
-
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
|
|
144
|
-
</style>
|
|
145
|
-
</head>
|
|
146
|
-
<body>
|
|
147
|
-
<div class="container">
|
|
148
|
-
<h1>Waiting for authentication...</h1>
|
|
149
|
-
<div class="spinner"></div>
|
|
150
|
-
<p>Please complete the authentication in your browser.</p>
|
|
151
|
-
</div>
|
|
152
|
-
</body>
|
|
153
|
-
</html>
|
|
154
|
-
`);
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
this.server.listen(port, '127.0.0.1', () => {
|
|
158
|
-
logger.debug(`Callback server listening on http://127.0.0.1:${port}`);
|
|
159
|
-
resolve();
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Build the authorization URL with PKCE parameters
|
|
165
|
-
*/
|
|
166
|
-
buildAuthorizationUrl(pkce, redirectUri) {
|
|
167
|
-
const config = getConfig();
|
|
168
|
-
// Use WorkOS AuthKit directly like the MCP server does
|
|
169
|
-
const authUrl = config.getWorkOSAuthUrl();
|
|
170
|
-
// Generate state for CSRF protection
|
|
171
|
-
this.state = this.generateState();
|
|
172
|
-
const params = new URLSearchParams({
|
|
173
|
-
client_id: config.oauthClientId || 'braingrid-cli',
|
|
174
|
-
redirect_uri: redirectUri,
|
|
175
|
-
response_type: 'code',
|
|
176
|
-
scope: 'openid email profile offline_access',
|
|
177
|
-
state: this.state,
|
|
178
|
-
code_challenge: pkce.challenge,
|
|
179
|
-
code_challenge_method: pkce.method,
|
|
180
|
-
});
|
|
181
|
-
return `${authUrl}/oauth2/authorize?${params.toString()}`;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Exchange authorization code for tokens
|
|
185
|
-
*/
|
|
186
|
-
async exchangeCodeForTokens(code, verifier, redirectUri) {
|
|
187
|
-
const config = getConfig();
|
|
188
|
-
// Use WorkOS AuthKit token endpoint
|
|
189
|
-
const tokenUrl = `${config.getWorkOSAuthUrl()}/oauth2/token`;
|
|
190
|
-
const params = new URLSearchParams({
|
|
191
|
-
grant_type: 'authorization_code',
|
|
192
|
-
client_id: config.oauthClientId || 'braingrid-cli',
|
|
193
|
-
code: code,
|
|
194
|
-
redirect_uri: redirectUri,
|
|
195
|
-
code_verifier: verifier,
|
|
196
|
-
});
|
|
197
|
-
logger.debug('Exchanging authorization code for tokens', { tokenUrl });
|
|
198
|
-
try {
|
|
199
|
-
const response = await axios.post(tokenUrl, params.toString(), {
|
|
200
|
-
headers: {
|
|
201
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
202
|
-
},
|
|
203
|
-
});
|
|
204
|
-
logger.debug('Token exchange successful', {
|
|
205
|
-
hasAccessToken: !!response.data.access_token,
|
|
206
|
-
hasRefreshToken: !!response.data.refresh_token,
|
|
207
|
-
});
|
|
208
|
-
return response.data;
|
|
209
|
-
}
|
|
210
|
-
catch (error) {
|
|
211
|
-
if (error instanceof AxiosError && error.response) {
|
|
212
|
-
const errorData = error.response.data;
|
|
213
|
-
logger.error('Token exchange failed', {
|
|
214
|
-
status: error.response.status,
|
|
215
|
-
error: errorData,
|
|
216
|
-
});
|
|
217
|
-
throw new Error(`Token exchange failed: ${errorData.error_description || errorData.error}`);
|
|
218
|
-
}
|
|
219
|
-
throw new Error(`Token exchange failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Wait for the authorization code from the callback
|
|
224
|
-
*/
|
|
225
|
-
async waitForAuthorizationCode(timeoutMs = 300000) {
|
|
226
|
-
// 5 minutes timeout
|
|
227
|
-
return new Promise((resolve, reject) => {
|
|
228
|
-
const startTime = Date.now();
|
|
229
|
-
const checkInterval = setInterval(() => {
|
|
230
|
-
// Check if we should abort
|
|
231
|
-
if (this.abortController?.signal.aborted) {
|
|
232
|
-
clearInterval(checkInterval);
|
|
233
|
-
reject(new Error('Authentication cancelled'));
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
// Check for error
|
|
237
|
-
if (this.authError) {
|
|
238
|
-
clearInterval(checkInterval);
|
|
239
|
-
reject(new Error(this.authError));
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
// Check for success
|
|
243
|
-
if (this.authorizationCode) {
|
|
244
|
-
clearInterval(checkInterval);
|
|
245
|
-
resolve(this.authorizationCode);
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
// Check for timeout
|
|
249
|
-
if (Date.now() - startTime > timeoutMs) {
|
|
250
|
-
clearInterval(checkInterval);
|
|
251
|
-
reject(new Error('Authentication timeout - no response received'));
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
}, 500); // Check every 500ms
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Prepare OAuth2 flow and return auth URL (for RPC mode)
|
|
259
|
-
* Starts the callback server but doesn't open the browser
|
|
260
|
-
*/
|
|
261
|
-
async prepareAuthUrl() {
|
|
262
|
-
logger.info('Preparing OAuth2 authentication URL for RPC mode');
|
|
263
|
-
// Create new AbortController for this authentication session
|
|
264
|
-
this.abortController = new AbortController();
|
|
265
|
-
// Reset state
|
|
266
|
-
this.authorizationCode = undefined;
|
|
267
|
-
this.authError = undefined;
|
|
268
|
-
this.state = undefined;
|
|
269
|
-
this.pkceVerifier = undefined;
|
|
270
|
-
// Step 1: Generate PKCE challenge
|
|
271
|
-
const pkce = this.generatePKCEChallenge();
|
|
272
|
-
this.pkceVerifier = pkce.verifier; // Store for later use
|
|
273
|
-
logger.debug('PKCE challenge generated');
|
|
274
|
-
// Step 2: Use fixed port and start callback server
|
|
275
|
-
const port = this.getCallbackPort();
|
|
276
|
-
const redirectUri = `http://127.0.0.1:${port}/callback`;
|
|
277
|
-
logger.info('Starting callback server', { port, redirectUri });
|
|
278
|
-
await this.startCallbackServer(port);
|
|
279
|
-
// Step 3: Build authorization URL
|
|
280
|
-
const authUrl = this.buildAuthorizationUrl(pkce, redirectUri);
|
|
281
|
-
logger.info('Authorization URL ready for RPC client', { authUrl });
|
|
282
|
-
if (!this.state) {
|
|
283
|
-
throw new Error('State not initialized');
|
|
284
|
-
}
|
|
285
|
-
return {
|
|
286
|
-
authUrl,
|
|
287
|
-
redirectUri,
|
|
288
|
-
state: this.state,
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Complete the OAuth2 flow after browser authentication (for RPC mode)
|
|
293
|
-
* Call this after prepareAuthUrl() and the user has authenticated
|
|
294
|
-
*/
|
|
295
|
-
async completeAuth(timeoutMs = 300000) {
|
|
296
|
-
if (!this.pkceVerifier) {
|
|
297
|
-
throw new Error('Must call prepareAuthUrl() before completeAuth()');
|
|
298
|
-
}
|
|
299
|
-
try {
|
|
300
|
-
// Wait for authorization code from callback
|
|
301
|
-
logger.info('Waiting for user to complete authentication in browser...');
|
|
302
|
-
const code = await this.waitForAuthorizationCode(timeoutMs);
|
|
303
|
-
logger.info('Authorization code received');
|
|
304
|
-
// Get redirect URI from server (it's always the same port)
|
|
305
|
-
const port = this.getCallbackPort();
|
|
306
|
-
const redirectUri = `http://127.0.0.1:${port}/callback`;
|
|
307
|
-
// Exchange code for tokens
|
|
308
|
-
const tokens = await this.exchangeCodeForTokens(code, this.pkceVerifier, redirectUri);
|
|
309
|
-
logger.info('Authentication successful');
|
|
310
|
-
// Return token info
|
|
311
|
-
return {
|
|
312
|
-
accessToken: tokens.access_token,
|
|
313
|
-
refreshToken: tokens.refresh_token,
|
|
314
|
-
idToken: tokens.id_token,
|
|
315
|
-
expiresIn: tokens.expires_in,
|
|
316
|
-
tokenType: tokens.token_type,
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
catch (error) {
|
|
320
|
-
this.abort();
|
|
321
|
-
throw error;
|
|
322
|
-
}
|
|
323
|
-
finally {
|
|
324
|
-
// Clean up server if still running
|
|
325
|
-
if (this.server) {
|
|
326
|
-
this.server.close();
|
|
327
|
-
this.server = undefined;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Initiates the OAuth2 authorization code flow with PKCE
|
|
333
|
-
*/
|
|
334
|
-
async authenticate() {
|
|
335
|
-
logger.info('Starting OAuth2 authentication flow with PKCE');
|
|
336
|
-
// Create new AbortController for this authentication session
|
|
337
|
-
this.abortController = new AbortController();
|
|
338
|
-
// Reset state
|
|
339
|
-
this.authorizationCode = undefined;
|
|
340
|
-
this.authError = undefined;
|
|
341
|
-
this.state = undefined;
|
|
342
|
-
try {
|
|
343
|
-
// Step 1: Generate PKCE challenge
|
|
344
|
-
const pkce = this.generatePKCEChallenge();
|
|
345
|
-
logger.debug('PKCE challenge generated');
|
|
346
|
-
// Step 2: Use fixed port and start callback server
|
|
347
|
-
const port = this.getCallbackPort();
|
|
348
|
-
const redirectUri = `http://127.0.0.1:${port}/callback`;
|
|
349
|
-
logger.info('Starting callback server', { port, redirectUri });
|
|
350
|
-
await this.startCallbackServer(port);
|
|
351
|
-
// Step 3: Build authorization URL
|
|
352
|
-
const authUrl = this.buildAuthorizationUrl(pkce, redirectUri);
|
|
353
|
-
logger.info('Authorization URL ready', { authUrl });
|
|
354
|
-
// Notify callback if set
|
|
355
|
-
if (this.onAuthCodeReceived) {
|
|
356
|
-
this.onAuthCodeReceived(authUrl);
|
|
357
|
-
}
|
|
358
|
-
// Step 4: Open browser
|
|
359
|
-
try {
|
|
360
|
-
logger.debug('Opening browser for authentication');
|
|
361
|
-
await open(authUrl);
|
|
362
|
-
logger.info('Browser opened automatically');
|
|
363
|
-
}
|
|
364
|
-
catch (error) {
|
|
365
|
-
logger.warn('Failed to open browser automatically', { error });
|
|
366
|
-
logger.info(`Please open the following URL manually:\n${authUrl}`);
|
|
367
|
-
}
|
|
368
|
-
// Step 5: Wait for authorization code
|
|
369
|
-
logger.info('Waiting for user to complete authentication...');
|
|
370
|
-
const code = await this.waitForAuthorizationCode();
|
|
371
|
-
logger.info('Authorization code received');
|
|
372
|
-
// Step 6: Exchange code for tokens
|
|
373
|
-
const tokens = await this.exchangeCodeForTokens(code, pkce.verifier, redirectUri);
|
|
374
|
-
logger.info('Authentication successful');
|
|
375
|
-
// Step 7: Return token info
|
|
376
|
-
return {
|
|
377
|
-
accessToken: tokens.access_token,
|
|
378
|
-
refreshToken: tokens.refresh_token,
|
|
379
|
-
idToken: tokens.id_token,
|
|
380
|
-
expiresIn: tokens.expires_in,
|
|
381
|
-
tokenType: tokens.token_type,
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
catch (error) {
|
|
385
|
-
// Abort any ongoing operations
|
|
386
|
-
this.abort();
|
|
387
|
-
throw error;
|
|
388
|
-
}
|
|
389
|
-
finally {
|
|
390
|
-
// Clean up server if still running
|
|
391
|
-
if (this.server) {
|
|
392
|
-
this.server.close();
|
|
393
|
-
this.server = undefined;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* Refresh an access token using a refresh token
|
|
399
|
-
*/
|
|
400
|
-
async refreshToken(refreshToken) {
|
|
401
|
-
const config = getConfig();
|
|
402
|
-
// Use WorkOS AuthKit token endpoint for refresh
|
|
403
|
-
const tokenUrl = `${config.getWorkOSAuthUrl()}/oauth2/token`;
|
|
404
|
-
const params = new URLSearchParams({
|
|
405
|
-
grant_type: 'refresh_token',
|
|
406
|
-
client_id: config.oauthClientId || 'braingrid-cli',
|
|
407
|
-
refresh_token: refreshToken,
|
|
408
|
-
});
|
|
409
|
-
logger.debug('Refreshing access token');
|
|
410
|
-
try {
|
|
411
|
-
const response = await axios.post(tokenUrl, params.toString(), {
|
|
412
|
-
headers: {
|
|
413
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
414
|
-
},
|
|
415
|
-
});
|
|
416
|
-
logger.debug('Token refresh successful');
|
|
417
|
-
return {
|
|
418
|
-
accessToken: response.data.access_token,
|
|
419
|
-
refreshToken: response.data.refresh_token,
|
|
420
|
-
idToken: response.data.id_token,
|
|
421
|
-
expiresIn: response.data.expires_in,
|
|
422
|
-
tokenType: response.data.token_type,
|
|
423
|
-
};
|
|
424
|
-
}
|
|
425
|
-
catch (error) {
|
|
426
|
-
if (error instanceof AxiosError && error.response) {
|
|
427
|
-
const errorData = error.response.data;
|
|
428
|
-
logger.error('Token refresh failed', {
|
|
429
|
-
status: error.response.status,
|
|
430
|
-
error: errorData,
|
|
431
|
-
});
|
|
432
|
-
throw new Error(`Token refresh failed: ${errorData.error_description || errorData.error}`);
|
|
433
|
-
}
|
|
434
|
-
throw new Error(`Token refresh failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Abort any ongoing authentication
|
|
439
|
-
*/
|
|
440
|
-
abort() {
|
|
441
|
-
if (this.abortController) {
|
|
442
|
-
this.abortController.abort();
|
|
443
|
-
this.abortController = undefined;
|
|
444
|
-
}
|
|
445
|
-
if (this.server) {
|
|
446
|
-
this.server.close();
|
|
447
|
-
this.server = undefined;
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
//# sourceMappingURL=oauth2-auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2-auth.js","sourceRoot":"","sources":["../../src/services/oauth2-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project Service
|
|
3
|
-
* Handles all API interactions for projects
|
|
4
|
-
*/
|
|
5
|
-
import { BraingridAuth } from './auth.js';
|
|
6
|
-
import { Project, CreateProjectRequest, UpdateProjectRequest, ListProjectsResponse, ListProjectsWithRepositoryResponse } from '../types/project.js';
|
|
7
|
-
export declare class ProjectService {
|
|
8
|
-
private baseUrl;
|
|
9
|
-
private auth;
|
|
10
|
-
private axios;
|
|
11
|
-
constructor(baseUrl: string, auth: BraingridAuth);
|
|
12
|
-
private getHeaders;
|
|
13
|
-
listProjects(params: {
|
|
14
|
-
page?: number;
|
|
15
|
-
limit?: number;
|
|
16
|
-
repository_owner?: string;
|
|
17
|
-
repository_name?: string;
|
|
18
|
-
}): Promise<ListProjectsResponse | ListProjectsWithRepositoryResponse>;
|
|
19
|
-
getProject(projectId: string): Promise<Project>;
|
|
20
|
-
createProject(data: CreateProjectRequest): Promise<Project>;
|
|
21
|
-
updateProject(projectId: string, data: UpdateProjectRequest): Promise<Project>;
|
|
22
|
-
deleteProject(projectId: string): Promise<void>;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=project-service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-service.d.ts","sourceRoot":"","sources":["../../src/services/project-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACN,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,kCAAkC,EAClC,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,cAAc;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAAgB;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;IAMhD,OAAO,CAAC,UAAU;IAMZ,YAAY,CAAC,MAAM,EAAE;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,OAAO,CAAC,oBAAoB,GAAG,kCAAkC,CAAC;IAoBhE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/C,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ3D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9E,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMrD"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project Service
|
|
3
|
-
* Handles all API interactions for projects
|
|
4
|
-
*/
|
|
5
|
-
import { createAuthenticatedAxios } from '../utils/axios-with-auth.js';
|
|
6
|
-
export class ProjectService {
|
|
7
|
-
constructor(baseUrl, auth) {
|
|
8
|
-
this.baseUrl = baseUrl;
|
|
9
|
-
this.auth = auth;
|
|
10
|
-
this.axios = createAuthenticatedAxios(auth);
|
|
11
|
-
}
|
|
12
|
-
getHeaders() {
|
|
13
|
-
return {
|
|
14
|
-
'Content-Type': 'application/json',
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
async listProjects(params) {
|
|
18
|
-
const queryParams = new URLSearchParams();
|
|
19
|
-
if (params.page)
|
|
20
|
-
queryParams.append('page', params.page.toString());
|
|
21
|
-
if (params.limit)
|
|
22
|
-
queryParams.append('limit', params.limit.toString());
|
|
23
|
-
if (params.repository_owner)
|
|
24
|
-
queryParams.append('repository_owner', params.repository_owner);
|
|
25
|
-
if (params.repository_name)
|
|
26
|
-
queryParams.append('repository_name', params.repository_name);
|
|
27
|
-
const url = `${this.baseUrl}/api/v1/projects?${queryParams.toString()}`;
|
|
28
|
-
const headers = this.getHeaders();
|
|
29
|
-
// API returns different response structures based on query parameters:
|
|
30
|
-
// - ListProjectsResponse (with pagination) for regular lists
|
|
31
|
-
// - ListProjectsWithRepositoryResponse (with total_count) for repository filters
|
|
32
|
-
// Handlers are equipped to handle both types via union type
|
|
33
|
-
const response = await this.axios.get(url, { headers });
|
|
34
|
-
return response.data;
|
|
35
|
-
}
|
|
36
|
-
async getProject(projectId) {
|
|
37
|
-
const url = `${this.baseUrl}/api/v1/projects/${projectId}`;
|
|
38
|
-
const headers = this.getHeaders();
|
|
39
|
-
const response = await this.axios.get(url, { headers });
|
|
40
|
-
return response.data;
|
|
41
|
-
}
|
|
42
|
-
async createProject(data) {
|
|
43
|
-
const url = `${this.baseUrl}/api/v1/projects`;
|
|
44
|
-
const headers = this.getHeaders();
|
|
45
|
-
const response = await this.axios.post(url, data, { headers });
|
|
46
|
-
return response.data;
|
|
47
|
-
}
|
|
48
|
-
async updateProject(projectId, data) {
|
|
49
|
-
const url = `${this.baseUrl}/api/v1/projects/${projectId}`;
|
|
50
|
-
const headers = this.getHeaders();
|
|
51
|
-
const response = await this.axios.patch(url, data, { headers });
|
|
52
|
-
return response.data;
|
|
53
|
-
}
|
|
54
|
-
async deleteProject(projectId) {
|
|
55
|
-
const url = `${this.baseUrl}/api/v1/projects/${projectId}`;
|
|
56
|
-
const headers = this.getHeaders();
|
|
57
|
-
await this.axios.delete(url, { headers });
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=project-service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-service.js","sourceRoot":"","sources":["../../src/services/project-service.ts"],"names":[],"mappings":"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"}
|