cloudops-cli 0.1.0
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/README.md +132 -0
- package/dist/api/api-client.d.ts +78 -0
- package/dist/api/api-client.d.ts.map +1 -0
- package/dist/api/api-client.js +197 -0
- package/dist/api/api-client.js.map +1 -0
- package/dist/api/index.d.ts +3 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/auth/__mocks__/auth-handler.d.ts +27 -0
- package/dist/auth/__mocks__/auth-handler.d.ts.map +1 -0
- package/dist/auth/__mocks__/auth-handler.js +24 -0
- package/dist/auth/__mocks__/auth-handler.js.map +1 -0
- package/dist/auth/auth-handler.d.ts +80 -0
- package/dist/auth/auth-handler.d.ts.map +1 -0
- package/dist/auth/auth-handler.js +266 -0
- package/dist/auth/auth-handler.js.map +1 -0
- package/dist/auth/callback-server.d.ts +31 -0
- package/dist/auth/callback-server.d.ts.map +1 -0
- package/dist/auth/callback-server.js +143 -0
- package/dist/auth/callback-server.js.map +1 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +422 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/accounts.d.ts +15 -0
- package/dist/commands/accounts.d.ts.map +1 -0
- package/dist/commands/accounts.js +307 -0
- package/dist/commands/accounts.js.map +1 -0
- package/dist/commands/audit.d.ts +23 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +348 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/config.d.ts +15 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +148 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/incident.d.ts +59 -0
- package/dist/commands/incident.d.ts.map +1 -0
- package/dist/commands/incident.js +1032 -0
- package/dist/commands/incident.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +300 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/investigate.d.ts +15 -0
- package/dist/commands/investigate.d.ts.map +1 -0
- package/dist/commands/investigate.js +65 -0
- package/dist/commands/investigate.js.map +1 -0
- package/dist/commands/runbook.d.ts +20 -0
- package/dist/commands/runbook.d.ts.map +1 -0
- package/dist/commands/runbook.js +265 -0
- package/dist/commands/runbook.js.map +1 -0
- package/dist/config/__mocks__/config-handler.d.ts +11 -0
- package/dist/config/__mocks__/config-handler.d.ts.map +1 -0
- package/dist/config/__mocks__/config-handler.js +31 -0
- package/dist/config/__mocks__/config-handler.js.map +1 -0
- package/dist/config/certificate-pinning.d.ts +68 -0
- package/dist/config/certificate-pinning.d.ts.map +1 -0
- package/dist/config/certificate-pinning.js +249 -0
- package/dist/config/certificate-pinning.js.map +1 -0
- package/dist/config/config-handler.d.ts +45 -0
- package/dist/config/config-handler.d.ts.map +1 -0
- package/dist/config/config-handler.js +149 -0
- package/dist/config/config-handler.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/types/cli-options.d.ts +31 -0
- package/dist/types/cli-options.d.ts.map +1 -0
- package/dist/types/cli-options.js +3 -0
- package/dist/types/cli-options.js.map +1 -0
- package/dist/utils/output-formatter.d.ts +67 -0
- package/dist/utils/output-formatter.d.ts.map +1 -0
- package/dist/utils/output-formatter.js +147 -0
- package/dist/utils/output-formatter.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AuthHandler = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
const oidc = __importStar(require("openid-client"));
|
|
42
|
+
/**
|
|
43
|
+
* Authentication handler for CLI
|
|
44
|
+
* Manages OAuth/SSO flow and secure token storage
|
|
45
|
+
*/
|
|
46
|
+
class AuthHandler {
|
|
47
|
+
tokenDir;
|
|
48
|
+
tokenFile;
|
|
49
|
+
encryptionKey;
|
|
50
|
+
constructor(configDir) {
|
|
51
|
+
this.tokenDir = configDir || path.join(os.homedir(), '.cloudops');
|
|
52
|
+
this.tokenFile = path.join(this.tokenDir, '.tokens');
|
|
53
|
+
// Generate or load encryption key for token storage
|
|
54
|
+
this.encryptionKey = this.getOrCreateEncryptionKey();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Start OAuth/SSO authentication flow
|
|
58
|
+
* Returns the authorization URL for the user to visit
|
|
59
|
+
*/
|
|
60
|
+
async startAuthFlow(issuerUrl, clientId, redirectUri = 'http://localhost:8080/callback') {
|
|
61
|
+
// Discover OIDC configuration
|
|
62
|
+
const config = await oidc.discovery(new URL(issuerUrl), clientId);
|
|
63
|
+
// Generate PKCE code verifier and challenge
|
|
64
|
+
const codeVerifier = oidc.randomPKCECodeVerifier();
|
|
65
|
+
const codeChallenge = await oidc.calculatePKCECodeChallenge(codeVerifier);
|
|
66
|
+
// Generate state for CSRF protection
|
|
67
|
+
const state = oidc.randomState();
|
|
68
|
+
const authUrl = oidc.buildAuthorizationUrl(config, {
|
|
69
|
+
redirect_uri: redirectUri,
|
|
70
|
+
scope: 'openid profile email',
|
|
71
|
+
code_challenge: codeChallenge,
|
|
72
|
+
code_challenge_method: 'S256',
|
|
73
|
+
state,
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
authUrl: authUrl.href,
|
|
77
|
+
codeVerifier,
|
|
78
|
+
state,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Complete OAuth/SSO authentication flow
|
|
83
|
+
* Exchange authorization code for tokens
|
|
84
|
+
*/
|
|
85
|
+
async completeAuthFlow(issuerUrl, clientId, code, codeVerifier, redirectUri = 'http://localhost:8080/callback') {
|
|
86
|
+
// Discover OIDC configuration
|
|
87
|
+
const config = await oidc.discovery(new URL(issuerUrl), clientId);
|
|
88
|
+
try {
|
|
89
|
+
const currentUrl = new URL(redirectUri);
|
|
90
|
+
currentUrl.searchParams.set('code', code);
|
|
91
|
+
const tokens = await oidc.authorizationCodeGrant(config, currentUrl, {
|
|
92
|
+
pkceCodeVerifier: codeVerifier,
|
|
93
|
+
expectedState: undefined, // State validation done by callback server
|
|
94
|
+
});
|
|
95
|
+
const tokenResponse = {
|
|
96
|
+
accessToken: tokens.access_token,
|
|
97
|
+
refreshToken: tokens.refresh_token,
|
|
98
|
+
idToken: tokens.id_token,
|
|
99
|
+
expiresIn: tokens.expires_in || 3600,
|
|
100
|
+
tokenType: tokens.token_type || 'Bearer',
|
|
101
|
+
};
|
|
102
|
+
// Store tokens securely
|
|
103
|
+
await this.storeTokens(tokenResponse);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
throw new Error(`Failed to exchange code for tokens: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get current access token, refreshing if necessary
|
|
111
|
+
*/
|
|
112
|
+
async getAccessToken(issuerUrl, clientId) {
|
|
113
|
+
const tokens = await this.loadTokens();
|
|
114
|
+
if (!tokens) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
// Check if token is expired or will expire in the next 5 minutes
|
|
118
|
+
const now = Math.floor(Date.now() / 1000);
|
|
119
|
+
const expiryBuffer = 300; // 5 minutes
|
|
120
|
+
if (tokens.expiresAt > now + expiryBuffer) {
|
|
121
|
+
// Token is still valid
|
|
122
|
+
return tokens.accessToken;
|
|
123
|
+
}
|
|
124
|
+
// Token is expired or expiring soon, try to refresh
|
|
125
|
+
if (tokens.refreshToken && issuerUrl && clientId) {
|
|
126
|
+
try {
|
|
127
|
+
await this.refreshToken(issuerUrl, clientId, tokens.refreshToken);
|
|
128
|
+
const refreshedTokens = await this.loadTokens();
|
|
129
|
+
return refreshedTokens?.accessToken || null;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Refresh failed, user needs to re-authenticate
|
|
133
|
+
console.error('Token refresh failed:', error);
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Refresh access token using refresh token
|
|
141
|
+
*/
|
|
142
|
+
async refreshToken(issuerUrl, clientId, refreshToken) {
|
|
143
|
+
// Discover OIDC configuration
|
|
144
|
+
const config = await oidc.discovery(new URL(issuerUrl), clientId);
|
|
145
|
+
try {
|
|
146
|
+
const tokens = await oidc.refreshTokenGrant(config, refreshToken);
|
|
147
|
+
const tokenResponse = {
|
|
148
|
+
accessToken: tokens.access_token,
|
|
149
|
+
refreshToken: tokens.refresh_token,
|
|
150
|
+
idToken: tokens.id_token,
|
|
151
|
+
expiresIn: tokens.expires_in || 3600,
|
|
152
|
+
tokenType: tokens.token_type || 'Bearer',
|
|
153
|
+
};
|
|
154
|
+
// Store refreshed tokens
|
|
155
|
+
await this.storeTokens(tokenResponse);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
throw new Error(`Failed to refresh token: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if user is authenticated
|
|
163
|
+
*/
|
|
164
|
+
async isAuthenticated() {
|
|
165
|
+
const tokens = await this.loadTokens();
|
|
166
|
+
if (!tokens) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
const now = Math.floor(Date.now() / 1000);
|
|
170
|
+
return tokens.expiresAt > now;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Clear stored tokens (logout)
|
|
174
|
+
*/
|
|
175
|
+
async clearTokens() {
|
|
176
|
+
if (fs.existsSync(this.tokenFile)) {
|
|
177
|
+
fs.unlinkSync(this.tokenFile);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Store tokens securely (encrypted)
|
|
182
|
+
*/
|
|
183
|
+
async storeTokens(tokens) {
|
|
184
|
+
const now = Math.floor(Date.now() / 1000);
|
|
185
|
+
const storage = {
|
|
186
|
+
accessToken: tokens.accessToken,
|
|
187
|
+
refreshToken: tokens.refreshToken,
|
|
188
|
+
expiresAt: now + tokens.expiresIn,
|
|
189
|
+
tokenType: tokens.tokenType,
|
|
190
|
+
};
|
|
191
|
+
// Encrypt token data
|
|
192
|
+
const encrypted = this.encrypt(JSON.stringify(storage));
|
|
193
|
+
// Ensure directory exists
|
|
194
|
+
if (!fs.existsSync(this.tokenDir)) {
|
|
195
|
+
fs.mkdirSync(this.tokenDir, { recursive: true, mode: 0o700 });
|
|
196
|
+
}
|
|
197
|
+
// Write encrypted tokens to file with restricted permissions
|
|
198
|
+
fs.writeFileSync(this.tokenFile, encrypted, { mode: 0o600 });
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Load tokens from secure storage (decrypted)
|
|
202
|
+
*/
|
|
203
|
+
async loadTokens() {
|
|
204
|
+
if (!fs.existsSync(this.tokenFile)) {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
const encrypted = fs.readFileSync(this.tokenFile, 'utf8');
|
|
209
|
+
const decrypted = this.decrypt(encrypted);
|
|
210
|
+
return JSON.parse(decrypted);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
console.error('Failed to load tokens:', error);
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get or create encryption key for token storage
|
|
219
|
+
*/
|
|
220
|
+
getOrCreateEncryptionKey() {
|
|
221
|
+
const keyFile = path.join(this.tokenDir, '.key');
|
|
222
|
+
if (fs.existsSync(keyFile)) {
|
|
223
|
+
return fs.readFileSync(keyFile);
|
|
224
|
+
}
|
|
225
|
+
// Generate new encryption key
|
|
226
|
+
const key = crypto.randomBytes(32); // 256-bit key for AES-256
|
|
227
|
+
// Ensure directory exists
|
|
228
|
+
if (!fs.existsSync(this.tokenDir)) {
|
|
229
|
+
fs.mkdirSync(this.tokenDir, { recursive: true, mode: 0o700 });
|
|
230
|
+
}
|
|
231
|
+
// Store key with restricted permissions
|
|
232
|
+
fs.writeFileSync(keyFile, key, { mode: 0o600 });
|
|
233
|
+
return key;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Encrypt data using AES-256-GCM
|
|
237
|
+
*/
|
|
238
|
+
encrypt(plaintext) {
|
|
239
|
+
const iv = crypto.randomBytes(16);
|
|
240
|
+
const cipher = crypto.createCipheriv('aes-256-gcm', this.encryptionKey, iv);
|
|
241
|
+
let encrypted = cipher.update(plaintext, 'utf8', 'hex');
|
|
242
|
+
encrypted += cipher.final('hex');
|
|
243
|
+
const authTag = cipher.getAuthTag();
|
|
244
|
+
// Return IV + authTag + encrypted data
|
|
245
|
+
return iv.toString('hex') + ':' + authTag.toString('hex') + ':' + encrypted;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Decrypt data using AES-256-GCM
|
|
249
|
+
*/
|
|
250
|
+
decrypt(ciphertext) {
|
|
251
|
+
const parts = ciphertext.split(':');
|
|
252
|
+
if (parts.length !== 3) {
|
|
253
|
+
throw new Error('Invalid ciphertext format');
|
|
254
|
+
}
|
|
255
|
+
const iv = Buffer.from(parts[0], 'hex');
|
|
256
|
+
const authTag = Buffer.from(parts[1], 'hex');
|
|
257
|
+
const encrypted = parts[2];
|
|
258
|
+
const decipher = crypto.createDecipheriv('aes-256-gcm', this.encryptionKey, iv);
|
|
259
|
+
decipher.setAuthTag(authTag);
|
|
260
|
+
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
|
|
261
|
+
decrypted += decipher.final('utf8');
|
|
262
|
+
return decrypted;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
exports.AuthHandler = AuthHandler;
|
|
266
|
+
//# sourceMappingURL=auth-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-handler.js","sourceRoot":"","sources":["../../src/auth/auth-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Callback result from OAuth flow
|
|
3
|
+
*/
|
|
4
|
+
export interface CallbackResult {
|
|
5
|
+
code?: string;
|
|
6
|
+
state?: string;
|
|
7
|
+
error?: string;
|
|
8
|
+
errorDescription?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Simple HTTP server to handle OAuth callback
|
|
12
|
+
*/
|
|
13
|
+
export declare class CallbackServer {
|
|
14
|
+
private server;
|
|
15
|
+
private port;
|
|
16
|
+
constructor(port?: number);
|
|
17
|
+
/**
|
|
18
|
+
* Start the callback server and wait for OAuth response
|
|
19
|
+
* Returns a promise that resolves with the callback result
|
|
20
|
+
*/
|
|
21
|
+
waitForCallback(expectedState: string, timeoutMs?: number): Promise<CallbackResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Stop the callback server
|
|
24
|
+
*/
|
|
25
|
+
stop(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get the callback URL for this server
|
|
28
|
+
*/
|
|
29
|
+
getCallbackUrl(): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=callback-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-server.d.ts","sourceRoot":"","sources":["../../src/auth/callback-server.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,GAAE,MAAa;IAI/B;;;OAGG;IACG,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAkFjG;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CallbackServer = void 0;
|
|
37
|
+
const http = __importStar(require("http"));
|
|
38
|
+
const url = __importStar(require("url"));
|
|
39
|
+
/**
|
|
40
|
+
* Simple HTTP server to handle OAuth callback
|
|
41
|
+
*/
|
|
42
|
+
class CallbackServer {
|
|
43
|
+
server = null;
|
|
44
|
+
port;
|
|
45
|
+
constructor(port = 8080) {
|
|
46
|
+
this.port = port;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Start the callback server and wait for OAuth response
|
|
50
|
+
* Returns a promise that resolves with the callback result
|
|
51
|
+
*/
|
|
52
|
+
async waitForCallback(expectedState, timeoutMs = 120000) {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
const timeout = setTimeout(() => {
|
|
55
|
+
this.stop();
|
|
56
|
+
reject(new Error('Authentication timeout - no callback received'));
|
|
57
|
+
}, timeoutMs);
|
|
58
|
+
this.server = http.createServer((req, res) => {
|
|
59
|
+
const parsedUrl = url.parse(req.url || '', true);
|
|
60
|
+
if (parsedUrl.pathname === '/callback') {
|
|
61
|
+
const query = parsedUrl.query;
|
|
62
|
+
// Send response to browser
|
|
63
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
64
|
+
if (query.error) {
|
|
65
|
+
res.end(`
|
|
66
|
+
<html>
|
|
67
|
+
<head><title>Authentication Failed</title></head>
|
|
68
|
+
<body>
|
|
69
|
+
<h1>Authentication Failed</h1>
|
|
70
|
+
<p>Error: ${query.error}</p>
|
|
71
|
+
<p>${query.error_description || ''}</p>
|
|
72
|
+
<p>You can close this window and return to the CLI.</p>
|
|
73
|
+
</body>
|
|
74
|
+
</html>
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
res.end(`
|
|
79
|
+
<html>
|
|
80
|
+
<head><title>Authentication Successful</title></head>
|
|
81
|
+
<body>
|
|
82
|
+
<h1>Authentication Successful!</h1>
|
|
83
|
+
<p>You can close this window and return to the CLI.</p>
|
|
84
|
+
</body>
|
|
85
|
+
</html>
|
|
86
|
+
`);
|
|
87
|
+
}
|
|
88
|
+
// Clear timeout
|
|
89
|
+
clearTimeout(timeout);
|
|
90
|
+
// Stop server
|
|
91
|
+
this.stop();
|
|
92
|
+
// Validate state to prevent CSRF
|
|
93
|
+
if (query.state !== expectedState) {
|
|
94
|
+
reject(new Error('State mismatch - possible CSRF attack'));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Resolve with callback result
|
|
98
|
+
if (query.error) {
|
|
99
|
+
resolve({
|
|
100
|
+
error: query.error,
|
|
101
|
+
errorDescription: query.error_description,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
resolve({
|
|
106
|
+
code: query.code,
|
|
107
|
+
state: query.state,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Unknown path
|
|
113
|
+
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
114
|
+
res.end('Not Found');
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
this.server.listen(this.port, () => {
|
|
118
|
+
console.log(`Callback server listening on http://localhost:${this.port}`);
|
|
119
|
+
});
|
|
120
|
+
this.server.on('error', (error) => {
|
|
121
|
+
clearTimeout(timeout);
|
|
122
|
+
reject(new Error(`Failed to start callback server: ${error.message}`));
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Stop the callback server
|
|
128
|
+
*/
|
|
129
|
+
stop() {
|
|
130
|
+
if (this.server) {
|
|
131
|
+
this.server.close();
|
|
132
|
+
this.server = null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get the callback URL for this server
|
|
137
|
+
*/
|
|
138
|
+
getCallbackUrl() {
|
|
139
|
+
return `http://localhost:${this.port}/callback`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.CallbackServer = CallbackServer;
|
|
143
|
+
//# sourceMappingURL=callback-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-server.js","sourceRoot":"","sources":["../../src/auth/callback-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CallbackServer = exports.AuthHandler = void 0;
|
|
4
|
+
var auth_handler_1 = require("./auth-handler");
|
|
5
|
+
Object.defineProperty(exports, "AuthHandler", { enumerable: true, get: function () { return auth_handler_1.AuthHandler; } });
|
|
6
|
+
var callback_server_1 = require("./callback-server");
|
|
7
|
+
Object.defineProperty(exports, "CallbackServer", { enumerable: true, get: function () { return callback_server_1.CallbackServer; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":";;;AAAA,+CAA2D;AAAlD,2GAAA,WAAW,OAAA;AACpB,qDAAmE;AAA1D,iHAAA,cAAc,OAAA"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|