zion-mcp 1.0.5 → 1.0.7
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/dist/auth/credential-store.d.ts +5 -8
- package/dist/auth/credential-store.d.ts.map +1 -1
- package/dist/auth/credential-store.js +46 -25
- package/dist/auth/credential-store.js.map +1 -1
- package/dist/auth/jwt-auth.d.ts.map +1 -1
- package/dist/auth/jwt-auth.js +0 -11
- package/dist/auth/jwt-auth.js.map +1 -1
- package/dist/auth/oauth-flow.d.ts +11 -0
- package/dist/auth/oauth-flow.d.ts.map +1 -0
- package/dist/auth/oauth-flow.js +239 -0
- package/dist/auth/oauth-flow.js.map +1 -0
- package/dist/auth/token-manager.d.ts.map +1 -1
- package/dist/auth/token-manager.js +0 -1
- package/dist/auth/token-manager.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -6
- package/dist/config.js.map +1 -1
- package/dist/const.d.ts +2 -1
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +2 -1
- package/dist/const.js.map +1 -1
- package/dist/mock-data/converter.d.ts +3 -0
- package/dist/mock-data/converter.d.ts.map +1 -0
- package/dist/mock-data/converter.js +33 -0
- package/dist/mock-data/converter.js.map +1 -0
- package/dist/mock-data/generator.d.ts +17 -0
- package/dist/mock-data/generator.d.ts.map +1 -0
- package/dist/mock-data/generator.js +225 -0
- package/dist/mock-data/generator.js.map +1 -0
- package/dist/mock-data/image-generator.d.ts +7 -0
- package/dist/mock-data/image-generator.d.ts.map +1 -0
- package/dist/mock-data/image-generator.js +175 -0
- package/dist/mock-data/image-generator.js.map +1 -0
- package/dist/mock-data/index.d.ts +10 -0
- package/dist/mock-data/index.d.ts.map +1 -0
- package/dist/mock-data/index.js +9 -0
- package/dist/mock-data/index.js.map +1 -0
- package/dist/mock-data/inserter.d.ts +12 -0
- package/dist/mock-data/inserter.d.ts.map +1 -0
- package/dist/mock-data/inserter.js +57 -0
- package/dist/mock-data/inserter.js.map +1 -0
- package/dist/mock-data/recursive-generator.d.ts +4 -0
- package/dist/mock-data/recursive-generator.d.ts.map +1 -0
- package/dist/mock-data/recursive-generator.js +226 -0
- package/dist/mock-data/recursive-generator.js.map +1 -0
- package/dist/mock-data/related-ids-fetcher.d.ts +6 -0
- package/dist/mock-data/related-ids-fetcher.d.ts.map +1 -0
- package/dist/mock-data/related-ids-fetcher.js +60 -0
- package/dist/mock-data/related-ids-fetcher.js.map +1 -0
- package/dist/mock-data/schema-parser.d.ts +12 -0
- package/dist/mock-data/schema-parser.d.ts.map +1 -0
- package/dist/mock-data/schema-parser.js +73 -0
- package/dist/mock-data/schema-parser.js.map +1 -0
- package/dist/mock-data/types.d.ts +161 -0
- package/dist/mock-data/types.d.ts.map +1 -0
- package/dist/mock-data/types.js +2 -0
- package/dist/mock-data/types.js.map +1 -0
- package/dist/mock-data/utils.d.ts +7 -0
- package/dist/mock-data/utils.d.ts.map +1 -0
- package/dist/mock-data/utils.js +102 -0
- package/dist/mock-data/utils.js.map +1 -0
- package/dist/mock-data-gen.d.ts +227 -0
- package/dist/mock-data-gen.d.ts.map +1 -0
- package/dist/mock-data-gen.js +513 -0
- package/dist/mock-data-gen.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +0 -10
- package/dist/server.js.map +1 -1
- package/dist/tools/get-projects.d.ts +5 -0
- package/dist/tools/get-projects.d.ts.map +1 -0
- package/dist/tools/get-projects.js +42 -0
- package/dist/tools/get-projects.js.map +1 -0
- package/dist/tools/get-schema.d.ts +6 -0
- package/dist/tools/get-schema.d.ts.map +1 -0
- package/dist/tools/get-schema.js +67 -0
- package/dist/tools/get-schema.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +145 -21
- package/dist/tools/index.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,24 +1,18 @@
|
|
|
1
|
-
import type { StoredCredentials, OAuthTokens, ProjectContext, MCPConfig } from "../types.js";
|
|
1
|
+
import type { StoredCredentials, OAuthTokens, ProjectContext, MCPConfig, DataVisualizerInfo } from "../types.js";
|
|
2
2
|
export declare class CredentialStore {
|
|
3
3
|
private workspaceRoot;
|
|
4
4
|
private mcpConfigDir;
|
|
5
5
|
private credentialsPath;
|
|
6
6
|
private configPath;
|
|
7
7
|
private projectContextPath;
|
|
8
|
+
private dataVisualizerPath;
|
|
8
9
|
constructor(workspaceRoot: string);
|
|
9
10
|
setWorkspaceRoot(workspaceRoot: string): void;
|
|
10
11
|
private ensureInitialized;
|
|
11
12
|
saveCredentials(credentials: OAuthTokens): Promise<void>;
|
|
12
13
|
loadCredentials(): Promise<StoredCredentials | null>;
|
|
13
|
-
/**
|
|
14
|
-
* Validate credentials including JWT token expiration
|
|
15
|
-
*/
|
|
16
14
|
private validateCredentials;
|
|
17
15
|
deleteCredentials(): Promise<void>;
|
|
18
|
-
/**
|
|
19
|
-
* Check if current stored credentials are valid
|
|
20
|
-
* @returns true if credentials exist and are valid, false otherwise
|
|
21
|
-
*/
|
|
22
16
|
areCredentialsValid(): Promise<boolean>;
|
|
23
17
|
saveConfig(config: MCPConfig): Promise<void>;
|
|
24
18
|
loadConfig(): Promise<MCPConfig | null>;
|
|
@@ -27,5 +21,8 @@ export declare class CredentialStore {
|
|
|
27
21
|
deleteProjectContext(): Promise<void>;
|
|
28
22
|
getWorkspaceRoot(): string;
|
|
29
23
|
getMcpConfigDir(): string;
|
|
24
|
+
saveDataVisualizerInfo(projectExId: string, runtimeBackendAdminToken: string): Promise<void>;
|
|
25
|
+
loadDataVisualizerInfo(): Promise<DataVisualizerInfo | null>;
|
|
26
|
+
deleteDataVisualizerInfo(): Promise<void>;
|
|
30
27
|
}
|
|
31
28
|
//# sourceMappingURL=credential-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../src/auth/credential-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../src/auth/credential-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,SAAS,EACT,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAGrB,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,aAAa,EAAE,MAAM;IAejC,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;YAe/B,iBAAiB;IAezB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BxD,eAAe,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAqB1D,OAAO,CAAC,mBAAmB;IA8DrB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWlC,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAKvC,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,UAAU,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAYvC,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD,kBAAkB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAYpD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3C,gBAAgB,IAAI,MAAM;IAI1B,eAAe,IAAI,MAAM;IAInB,sBAAsB,CAC1B,WAAW,EAAE,MAAM,EACnB,wBAAwB,EAAE,MAAM,GAC/B,OAAO,CAAC,IAAI,CAAC;IAmBV,sBAAsB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAY5D,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;CAUhD"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// src/auth/credential-store.ts
|
|
2
1
|
import { promises as fs } from "fs";
|
|
3
2
|
import path from "path";
|
|
4
3
|
import jwt from "jsonwebtoken";
|
|
@@ -9,12 +8,14 @@ export class CredentialStore {
|
|
|
9
8
|
credentialsPath;
|
|
10
9
|
configPath;
|
|
11
10
|
projectContextPath;
|
|
11
|
+
dataVisualizerPath;
|
|
12
12
|
constructor(workspaceRoot) {
|
|
13
13
|
this.workspaceRoot = workspaceRoot;
|
|
14
14
|
this.mcpConfigDir = path.join(workspaceRoot, `.${SERVER_NAME}`);
|
|
15
15
|
this.credentialsPath = path.join(this.mcpConfigDir, "credentials.json");
|
|
16
16
|
this.configPath = path.join(this.mcpConfigDir, "config.json");
|
|
17
17
|
this.projectContextPath = path.join(this.mcpConfigDir, "project-context.json");
|
|
18
|
+
this.dataVisualizerPath = path.join(this.mcpConfigDir, "data-visualizer.json");
|
|
18
19
|
}
|
|
19
20
|
setWorkspaceRoot(workspaceRoot) {
|
|
20
21
|
this.workspaceRoot = workspaceRoot;
|
|
@@ -22,6 +23,7 @@ export class CredentialStore {
|
|
|
22
23
|
this.credentialsPath = path.join(this.mcpConfigDir, "credentials.json");
|
|
23
24
|
this.configPath = path.join(this.mcpConfigDir, "config.json");
|
|
24
25
|
this.projectContextPath = path.join(this.mcpConfigDir, "project-context.json");
|
|
26
|
+
this.dataVisualizerPath = path.join(this.mcpConfigDir, "data-visualizer.json");
|
|
25
27
|
}
|
|
26
28
|
async ensureInitialized() {
|
|
27
29
|
await fs.mkdir(this.mcpConfigDir, { recursive: true });
|
|
@@ -31,7 +33,6 @@ export class CredentialStore {
|
|
|
31
33
|
await fs.writeFile(gitignorePath, gitignoreContent, { flag: "wx" });
|
|
32
34
|
}
|
|
33
35
|
catch (error) {
|
|
34
|
-
// Ignore if exists
|
|
35
36
|
if (error.code !== "EEXIST") {
|
|
36
37
|
throw error;
|
|
37
38
|
}
|
|
@@ -39,7 +40,6 @@ export class CredentialStore {
|
|
|
39
40
|
}
|
|
40
41
|
async saveCredentials(credentials) {
|
|
41
42
|
await this.ensureInitialized();
|
|
42
|
-
// Validate credentials before saving
|
|
43
43
|
if (!credentials.access_token || credentials.access_token.trim() === "") {
|
|
44
44
|
throw new Error("Invalid credentials: access_token is required");
|
|
45
45
|
}
|
|
@@ -48,13 +48,11 @@ export class CredentialStore {
|
|
|
48
48
|
token_type: credentials.token_type || "Bearer",
|
|
49
49
|
savedAt: new Date().toISOString(),
|
|
50
50
|
};
|
|
51
|
-
// Validate the credentials object
|
|
52
51
|
if (!this.validateCredentials(data)) {
|
|
53
52
|
throw new Error("Invalid credentials: JWT token validation failed");
|
|
54
53
|
}
|
|
55
54
|
const tempPath = `${this.credentialsPath}.tmp`;
|
|
56
|
-
await fs.writeFile(tempPath, JSON.stringify(data, null, 2), { mode: 0o600 }
|
|
57
|
-
);
|
|
55
|
+
await fs.writeFile(tempPath, JSON.stringify(data, null, 2), { mode: 0o600 });
|
|
58
56
|
await fs.rename(tempPath, this.credentialsPath);
|
|
59
57
|
console.error("[CredentialStore] Credentials saved successfully");
|
|
60
58
|
}
|
|
@@ -62,7 +60,6 @@ export class CredentialStore {
|
|
|
62
60
|
try {
|
|
63
61
|
const data = await fs.readFile(this.credentialsPath, "utf8");
|
|
64
62
|
const credentials = JSON.parse(data);
|
|
65
|
-
// Validate credentials before returning
|
|
66
63
|
if (!this.validateCredentials(credentials)) {
|
|
67
64
|
console.error("[CredentialStore] Stored credentials are invalid or expired");
|
|
68
65
|
return null;
|
|
@@ -71,49 +68,40 @@ export class CredentialStore {
|
|
|
71
68
|
}
|
|
72
69
|
catch (error) {
|
|
73
70
|
if (error.code === "ENOENT") {
|
|
74
|
-
return null;
|
|
71
|
+
return null;
|
|
75
72
|
}
|
|
76
73
|
throw error;
|
|
77
74
|
}
|
|
78
75
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Validate credentials including JWT token expiration
|
|
81
|
-
*/
|
|
82
76
|
validateCredentials(credentials) {
|
|
83
|
-
// Check if credentials object is valid
|
|
84
77
|
if (!credentials || !credentials.access_token) {
|
|
85
78
|
console.error("[CredentialStore] Missing access token");
|
|
86
79
|
return false;
|
|
87
80
|
}
|
|
88
|
-
// Check token type
|
|
89
81
|
if (credentials.token_type !== "Bearer") {
|
|
90
82
|
console.error("[CredentialStore] Invalid token type:", credentials.token_type);
|
|
91
83
|
return false;
|
|
92
84
|
}
|
|
93
|
-
// Decode and validate JWT token
|
|
94
85
|
try {
|
|
95
86
|
const decoded = jwt.decode(credentials.access_token, { complete: true });
|
|
96
87
|
if (!decoded || typeof decoded === "string") {
|
|
97
88
|
console.error("[CredentialStore] Failed to decode JWT token");
|
|
98
89
|
return false;
|
|
99
90
|
}
|
|
100
|
-
// Check if token has expired
|
|
101
91
|
const payload = decoded.payload;
|
|
102
92
|
if (payload.exp) {
|
|
103
|
-
const expirationTime = payload.exp * 1000;
|
|
93
|
+
const expirationTime = payload.exp * 1000;
|
|
104
94
|
const currentTime = Date.now();
|
|
105
95
|
if (currentTime >= expirationTime) {
|
|
106
96
|
console.error("[CredentialStore] JWT token has expired");
|
|
107
97
|
return false;
|
|
108
98
|
}
|
|
109
|
-
|
|
110
|
-
const timeUntilExpiry = Math.floor((expirationTime - currentTime) / 1000 / 60); // minutes
|
|
99
|
+
const timeUntilExpiry = Math.floor((expirationTime - currentTime) / 1000 / 60);
|
|
111
100
|
console.error(`[CredentialStore] Token valid for ${timeUntilExpiry} more minutes`);
|
|
112
101
|
}
|
|
113
102
|
else {
|
|
114
103
|
console.warn("[CredentialStore] JWT token does not have expiration field");
|
|
115
104
|
}
|
|
116
|
-
// Optionally validate other JWT claims
|
|
117
105
|
if (payload.iss) {
|
|
118
106
|
console.error(`[CredentialStore] Token issued by: ${payload.iss}`);
|
|
119
107
|
}
|
|
@@ -138,10 +126,6 @@ export class CredentialStore {
|
|
|
138
126
|
}
|
|
139
127
|
}
|
|
140
128
|
}
|
|
141
|
-
/**
|
|
142
|
-
* Check if current stored credentials are valid
|
|
143
|
-
* @returns true if credentials exist and are valid, false otherwise
|
|
144
|
-
*/
|
|
145
129
|
async areCredentialsValid() {
|
|
146
130
|
const credentials = await this.loadCredentials();
|
|
147
131
|
return credentials !== null;
|
|
@@ -157,7 +141,7 @@ export class CredentialStore {
|
|
|
157
141
|
}
|
|
158
142
|
catch (error) {
|
|
159
143
|
if (error.code === "ENOENT") {
|
|
160
|
-
return null;
|
|
144
|
+
return null;
|
|
161
145
|
}
|
|
162
146
|
throw error;
|
|
163
147
|
}
|
|
@@ -179,7 +163,7 @@ export class CredentialStore {
|
|
|
179
163
|
}
|
|
180
164
|
catch (error) {
|
|
181
165
|
if (error.code === "ENOENT") {
|
|
182
|
-
return null;
|
|
166
|
+
return null;
|
|
183
167
|
}
|
|
184
168
|
throw error;
|
|
185
169
|
}
|
|
@@ -200,5 +184,42 @@ export class CredentialStore {
|
|
|
200
184
|
getMcpConfigDir() {
|
|
201
185
|
return this.mcpConfigDir;
|
|
202
186
|
}
|
|
187
|
+
async saveDataVisualizerInfo(projectExId, runtimeBackendAdminToken) {
|
|
188
|
+
await this.ensureInitialized();
|
|
189
|
+
const info = {
|
|
190
|
+
projectExId,
|
|
191
|
+
runtimeBackendAdminToken,
|
|
192
|
+
savedAt: new Date().toISOString(),
|
|
193
|
+
};
|
|
194
|
+
const tempPath = `${this.dataVisualizerPath}.tmp`;
|
|
195
|
+
await fs.writeFile(tempPath, JSON.stringify(info, null, 2), {
|
|
196
|
+
mode: 0o600,
|
|
197
|
+
});
|
|
198
|
+
await fs.rename(tempPath, this.dataVisualizerPath);
|
|
199
|
+
console.error("[CredentialStore] Runtime backend admin token saved successfully for project:", projectExId);
|
|
200
|
+
}
|
|
201
|
+
async loadDataVisualizerInfo() {
|
|
202
|
+
try {
|
|
203
|
+
const data = await fs.readFile(this.dataVisualizerPath, "utf8");
|
|
204
|
+
return JSON.parse(data);
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
if (error.code === "ENOENT") {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async deleteDataVisualizerInfo() {
|
|
214
|
+
try {
|
|
215
|
+
await fs.unlink(this.dataVisualizerPath);
|
|
216
|
+
console.error("[CredentialStore] Data visualizer info deleted");
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
if (error.code !== "ENOENT") {
|
|
220
|
+
throw error;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
203
224
|
}
|
|
204
225
|
//# sourceMappingURL=credential-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/auth/credential-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/auth/credential-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-auth.d.ts","sourceRoot":"","sources":["../../src/auth/jwt-auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jwt-auth.d.ts","sourceRoot":"","sources":["../../src/auth/jwt-auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAIvB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBtD,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;IA4F1C,WAAW,IAAI,MAAM;IAyDrB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAmDnC"}
|
package/dist/auth/jwt-auth.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// src/auth/jwt-auth.ts
|
|
2
1
|
import { createServer } from "http";
|
|
3
2
|
import open from "open";
|
|
4
3
|
export class JwtAuth {
|
|
@@ -12,7 +11,6 @@ export class JwtAuth {
|
|
|
12
11
|
const server = createServer();
|
|
13
12
|
server.on("error", (err) => {
|
|
14
13
|
if (err.code === "EADDRINUSE") {
|
|
15
|
-
// Try next port
|
|
16
14
|
resolve(this.findAvailablePort(port + 1));
|
|
17
15
|
}
|
|
18
16
|
else {
|
|
@@ -27,12 +25,10 @@ export class JwtAuth {
|
|
|
27
25
|
});
|
|
28
26
|
}
|
|
29
27
|
async authenticate() {
|
|
30
|
-
// Find available port
|
|
31
28
|
const callbackPort = await this.findAvailablePort();
|
|
32
29
|
const redirectUri = `http://localhost:${callbackPort}/callback`;
|
|
33
30
|
console.error(`[JwtAuth] Using callback URL: ${redirectUri}`);
|
|
34
31
|
console.error(`[JwtAuth] Opening browser for authentication...`);
|
|
35
|
-
// Start callback server and wait for JWT token
|
|
36
32
|
const jwtToken = await new Promise((resolve, reject) => {
|
|
37
33
|
const server = createServer(async (req, res) => {
|
|
38
34
|
if (!req.url) {
|
|
@@ -40,9 +36,7 @@ export class JwtAuth {
|
|
|
40
36
|
}
|
|
41
37
|
const url = new URL(req.url, `http://localhost:${callbackPort}`);
|
|
42
38
|
if (url.pathname === "/callback") {
|
|
43
|
-
// Log the full callback URL for debugging
|
|
44
39
|
console.error(`[JwtAuth] Callback received: ${req.url}`);
|
|
45
|
-
// Extract token parameter (the JWT token)
|
|
46
40
|
const token = url.searchParams.get("token");
|
|
47
41
|
if (!token || token.trim() === "") {
|
|
48
42
|
console.error("[JwtAuth] No token parameter found in callback URL");
|
|
@@ -58,7 +52,6 @@ export class JwtAuth {
|
|
|
58
52
|
const html = this.successPage();
|
|
59
53
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
60
54
|
res.end(html);
|
|
61
|
-
// Close server after short delay to ensure response is sent
|
|
62
55
|
setTimeout(() => {
|
|
63
56
|
server.close();
|
|
64
57
|
resolve(token);
|
|
@@ -67,11 +60,9 @@ export class JwtAuth {
|
|
|
67
60
|
});
|
|
68
61
|
server.on("error", reject);
|
|
69
62
|
server.listen(callbackPort, async () => {
|
|
70
|
-
// Build authentication URL with redirect_uri parameter
|
|
71
63
|
const authUrl = new URL(this.config.authEndpoint);
|
|
72
64
|
authUrl.searchParams.set("redirect_uri", redirectUri);
|
|
73
65
|
console.error(`[JwtAuth] Opening: ${authUrl.toString()}`);
|
|
74
|
-
// Open browser
|
|
75
66
|
try {
|
|
76
67
|
await open(authUrl.toString());
|
|
77
68
|
}
|
|
@@ -81,14 +72,12 @@ export class JwtAuth {
|
|
|
81
72
|
console.error(authUrl.toString());
|
|
82
73
|
}
|
|
83
74
|
});
|
|
84
|
-
// Timeout after 5 minutes
|
|
85
75
|
setTimeout(() => {
|
|
86
76
|
server.close();
|
|
87
77
|
reject(new Error("Authentication timeout - no response after 5 minutes"));
|
|
88
78
|
}, 300000);
|
|
89
79
|
});
|
|
90
80
|
console.error("[JwtAuth] JWT token received successfully");
|
|
91
|
-
// Return the JWT token directly as the access token
|
|
92
81
|
return {
|
|
93
82
|
access_token: jwtToken,
|
|
94
83
|
token_type: "Bearer",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt-auth.js","sourceRoot":"","sources":["../../src/auth/jwt-auth.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"jwt-auth.js","sourceRoot":"","sources":["../../src/auth/jwt-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,MAAM,CAAC;AAC/E,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,OAAO,OAAO;IACV,MAAM,CAAY;IAE1B,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAkB;QACxC,MAAM,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;QAC3D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;YAE9B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;gBAChD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAE9B,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;gBACvB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,YAAY,GAChB,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY;QAEhB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,oBAAoB,YAAY,WAAW,CAAC;QAEhE,OAAO,CAAC,KAAK,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,MAAM,GAAG,YAAY,CACzB,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;gBAClD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBACb,OAAO;gBACT,CAAC;gBAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,YAAY,EAAE,CAAC,CAAC;gBAEjE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;oBAEjC,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;oBAEzD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAE5C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;wBAClC,OAAO,CAAC,KAAK,CACX,oDAAoD,CACrD,CAAC;wBACF,OAAO,CAAC,KAAK,CACX,iCAAiC,EACjC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/C,CAAC;wBAEF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAC9B,kCAAkC,CACnC,CAAC;wBACF,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBACnB,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;wBACpD,OAAO;oBACT,CAAC;oBAED,OAAO,CAAC,KAAK,CACX,qCAAqC,KAAK,CAAC,MAAM,SAAS,CAC3D,CAAC;oBAEF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;oBAChC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAEd,UAAU,CAAC,GAAG,EAAE;wBACd,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,CAAC;YACH,CAAC,CACF,CAAC;YAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE3B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;gBAErC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAClD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gBAEtD,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAE1D,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;oBAChE,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;oBAC1D,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CACJ,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAClE,CAAC;YACJ,CAAC,EAAE,MAAM,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAE3D,OAAO;YACL,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,QAAQ;SACrB,CAAC;IACJ,CAAC;IAED,WAAW;QACT,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAqDH,CAAC;IACP,CAAC;IAED,SAAS,CAAC,OAAe;QACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA4CE,OAAO;;;;QAIZ,CAAC;IACP,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MCPConfig, OAuthTokens } from '../types.js';
|
|
2
|
+
export declare class OAuthFlow {
|
|
3
|
+
private config;
|
|
4
|
+
constructor(config: MCPConfig);
|
|
5
|
+
findAvailablePort(startPort?: number): Promise<number>;
|
|
6
|
+
authenticate(): Promise<OAuthTokens>;
|
|
7
|
+
successPage(): string;
|
|
8
|
+
errorPage(message: string): string;
|
|
9
|
+
private escapeHtml;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=oauth-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-flow.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-flow.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAIvB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBtD,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;IA0F1C,WAAW,IAAI,MAAM;IAkFrB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IA4ClC,OAAO,CAAC,UAAU;CAUnB"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
// src/auth/oauth-flow.ts
|
|
2
|
+
import { createServer } from 'http';
|
|
3
|
+
import open from 'open';
|
|
4
|
+
export class OAuthFlow {
|
|
5
|
+
config;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
async findAvailablePort(startPort) {
|
|
10
|
+
const port = startPort || this.config.callbackPort || 8088;
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const server = createServer();
|
|
13
|
+
server.on('error', (err) => {
|
|
14
|
+
if (err.code === 'EADDRINUSE') {
|
|
15
|
+
// Try next port
|
|
16
|
+
resolve(this.findAvailablePort(port + 1));
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
reject(err);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
server.listen(port, () => {
|
|
23
|
+
const address = server.address();
|
|
24
|
+
const resolvedPort = typeof address === 'object' && address !== null ? address.port : port;
|
|
25
|
+
server.close(() => resolve(resolvedPort));
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async authenticate() {
|
|
30
|
+
// Find available port
|
|
31
|
+
const callbackPort = await this.findAvailablePort();
|
|
32
|
+
const redirectUri = `http://localhost:${callbackPort}/callback`;
|
|
33
|
+
console.error(`[OAuth] Using callback URL: ${redirectUri}`);
|
|
34
|
+
console.error(`[OAuth] Opening browser for authentication...`);
|
|
35
|
+
// Start callback server and wait for JWT code
|
|
36
|
+
const jwtCode = await new Promise((resolve, reject) => {
|
|
37
|
+
const server = createServer(async (req, res) => {
|
|
38
|
+
if (!req.url) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const url = new URL(req.url, `http://localhost:${callbackPort}`);
|
|
42
|
+
if (url.pathname === '/callback') {
|
|
43
|
+
const params = url.searchParams;
|
|
44
|
+
// Check for errors
|
|
45
|
+
if (params.has('error')) {
|
|
46
|
+
const error = params.get('error') || 'unknown_error';
|
|
47
|
+
const description = params.get('error_description') || error;
|
|
48
|
+
const html = this.errorPage(`Authentication failed: ${description}`);
|
|
49
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
50
|
+
res.end(html);
|
|
51
|
+
server.close();
|
|
52
|
+
reject(new Error(description));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Success - got JWT code
|
|
56
|
+
const code = params.get('code');
|
|
57
|
+
if (!code) {
|
|
58
|
+
const html = this.errorPage('No code received in callback');
|
|
59
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
60
|
+
res.end(html);
|
|
61
|
+
server.close();
|
|
62
|
+
reject(new Error('No code parameter'));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const html = this.successPage();
|
|
66
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
67
|
+
res.end(html);
|
|
68
|
+
// Close server after short delay to ensure response is sent
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
server.close();
|
|
71
|
+
resolve(code);
|
|
72
|
+
}, 1000);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
server.on('error', reject);
|
|
76
|
+
server.listen(callbackPort, async () => {
|
|
77
|
+
// Build authentication URL with redirect_uri parameter
|
|
78
|
+
const authUrl = new URL(this.config.authEndpoint);
|
|
79
|
+
authUrl.searchParams.set('redirect_uri', redirectUri);
|
|
80
|
+
console.error(`[OAuth] Opening: ${authUrl.toString()}`);
|
|
81
|
+
// Open browser
|
|
82
|
+
try {
|
|
83
|
+
await open(authUrl.toString());
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error('[OAuth] Could not open browser automatically');
|
|
87
|
+
console.error('[OAuth] Please open this URL manually:');
|
|
88
|
+
console.error(authUrl.toString());
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// Timeout after 5 minutes
|
|
92
|
+
setTimeout(() => {
|
|
93
|
+
server.close();
|
|
94
|
+
reject(new Error('Authentication timeout - no response after 5 minutes'));
|
|
95
|
+
}, 300000);
|
|
96
|
+
});
|
|
97
|
+
console.error('[OAuth] JWT code received successfully');
|
|
98
|
+
// Return the JWT code directly as the access token
|
|
99
|
+
return {
|
|
100
|
+
access_token: jwtCode,
|
|
101
|
+
token_type: 'Bearer'
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
successPage() {
|
|
105
|
+
return `
|
|
106
|
+
<!DOCTYPE html>
|
|
107
|
+
<html>
|
|
108
|
+
<head>
|
|
109
|
+
<meta charset="utf-8">
|
|
110
|
+
<title>Authentication Successful</title>
|
|
111
|
+
<style>
|
|
112
|
+
body {
|
|
113
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
114
|
+
display: flex;
|
|
115
|
+
justify-content: center;
|
|
116
|
+
align-items: center;
|
|
117
|
+
height: 100vh;
|
|
118
|
+
margin: 0;
|
|
119
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
120
|
+
}
|
|
121
|
+
.container {
|
|
122
|
+
background: white;
|
|
123
|
+
padding: 3rem;
|
|
124
|
+
border-radius: 1rem;
|
|
125
|
+
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
|
|
126
|
+
text-align: center;
|
|
127
|
+
max-width: 400px;
|
|
128
|
+
}
|
|
129
|
+
.checkmark {
|
|
130
|
+
width: 80px;
|
|
131
|
+
height: 80px;
|
|
132
|
+
border-radius: 50%;
|
|
133
|
+
display: block;
|
|
134
|
+
stroke-width: 3;
|
|
135
|
+
stroke: #4bb543;
|
|
136
|
+
stroke-miterlimit: 10;
|
|
137
|
+
margin: 0 auto 2rem;
|
|
138
|
+
box-shadow: inset 0px 0px 0px #4bb543;
|
|
139
|
+
animation: fill .4s ease-in-out .4s forwards, scale .3s ease-in-out .9s both;
|
|
140
|
+
}
|
|
141
|
+
.checkmark__circle {
|
|
142
|
+
stroke-dasharray: 166;
|
|
143
|
+
stroke-dashoffset: 166;
|
|
144
|
+
stroke-width: 3;
|
|
145
|
+
stroke-miterlimit: 10;
|
|
146
|
+
stroke: #4bb543;
|
|
147
|
+
fill: none;
|
|
148
|
+
animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
|
|
149
|
+
}
|
|
150
|
+
.checkmark__check {
|
|
151
|
+
transform-origin: 50% 50%;
|
|
152
|
+
stroke-dasharray: 48;
|
|
153
|
+
stroke-dashoffset: 48;
|
|
154
|
+
animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
|
|
155
|
+
}
|
|
156
|
+
@keyframes stroke {
|
|
157
|
+
100% { stroke-dashoffset: 0; }
|
|
158
|
+
}
|
|
159
|
+
@keyframes scale {
|
|
160
|
+
0%, 100% { transform: none; }
|
|
161
|
+
50% { transform: scale3d(1.1, 1.1, 1); }
|
|
162
|
+
}
|
|
163
|
+
@keyframes fill {
|
|
164
|
+
100% { box-shadow: inset 0px 0px 0px 30px #4bb543; }
|
|
165
|
+
}
|
|
166
|
+
h1 { margin: 0 0 1rem; color: #333; }
|
|
167
|
+
p { color: #666; margin: 0; }
|
|
168
|
+
</style>
|
|
169
|
+
</head>
|
|
170
|
+
<body>
|
|
171
|
+
<div class="container">
|
|
172
|
+
<svg class="checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
|
|
173
|
+
<circle class="checkmark__circle" cx="26" cy="26" r="25" fill="none"/>
|
|
174
|
+
<path class="checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
|
|
175
|
+
</svg>
|
|
176
|
+
<h1>Authentication Successful!</h1>
|
|
177
|
+
<p>JWT token received. You can close this window.</p>
|
|
178
|
+
</div>
|
|
179
|
+
<script>
|
|
180
|
+
setTimeout(() => window.close(), 3000);
|
|
181
|
+
</script>
|
|
182
|
+
</body>
|
|
183
|
+
</html>`;
|
|
184
|
+
}
|
|
185
|
+
errorPage(message) {
|
|
186
|
+
return `
|
|
187
|
+
<!DOCTYPE html>
|
|
188
|
+
<html>
|
|
189
|
+
<head>
|
|
190
|
+
<meta charset="utf-8">
|
|
191
|
+
<title>Authentication Failed</title>
|
|
192
|
+
<style>
|
|
193
|
+
body {
|
|
194
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
195
|
+
display: flex;
|
|
196
|
+
justify-content: center;
|
|
197
|
+
align-items: center;
|
|
198
|
+
height: 100vh;
|
|
199
|
+
margin: 0;
|
|
200
|
+
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
|
201
|
+
}
|
|
202
|
+
.container {
|
|
203
|
+
background: white;
|
|
204
|
+
padding: 3rem;
|
|
205
|
+
border-radius: 1rem;
|
|
206
|
+
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
|
|
207
|
+
text-align: center;
|
|
208
|
+
max-width: 400px;
|
|
209
|
+
}
|
|
210
|
+
.error-icon {
|
|
211
|
+
font-size: 4rem;
|
|
212
|
+
margin-bottom: 1rem;
|
|
213
|
+
}
|
|
214
|
+
h1 { margin: 0 0 1rem; color: #d93025; }
|
|
215
|
+
p { color: #666; margin: 0; }
|
|
216
|
+
</style>
|
|
217
|
+
</head>
|
|
218
|
+
<body>
|
|
219
|
+
<div class="container">
|
|
220
|
+
<div class="error-icon">⚠️</div>
|
|
221
|
+
<h1>Authentication Failed</h1>
|
|
222
|
+
<p>${this.escapeHtml(message)}</p>
|
|
223
|
+
<p style="margin-top: 1rem; font-size: 0.9em;">You can close this window.</p>
|
|
224
|
+
</div>
|
|
225
|
+
</body>
|
|
226
|
+
</html>`;
|
|
227
|
+
}
|
|
228
|
+
escapeHtml(text) {
|
|
229
|
+
const map = {
|
|
230
|
+
'&': '&',
|
|
231
|
+
'<': '<',
|
|
232
|
+
'>': '>',
|
|
233
|
+
'"': '"',
|
|
234
|
+
"'": '''
|
|
235
|
+
};
|
|
236
|
+
return text.replace(/[&<>"']/g, (m) => map[m]);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=oauth-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-flow.js","sourceRoot":"","sources":["../../src/auth/oauth-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAkB;gBAEnB,eAAe,EAAE,eAAe;IAItC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CA4BvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,YAAY;IACf,KAAK,CAAkB;IAE/B,YAAY,eAAgC;QAC1C,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAErD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,gEAAgE,CAAC,CAAC;YAC/F,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,iDAAiD,CAAC,CAAC;YAEhF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;YAEpC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACzC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,gCAAgC,CAAC,CAAC;gBAE/D,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,4BAA4B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;gBACrF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,WAAW,CAAC,YAAY,CAAC;IAClC,CAAC;CACF"}
|