zion-mcp 1.0.5 → 1.0.8
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 +58 -36
- 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 +12 -22
- package/dist/auth/jwt-auth.js.map +1 -1
- package/dist/auth/token-manager.d.ts.map +1 -1
- package/dist/auth/token-manager.js +5 -6
- 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/logger.d.ts +14 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +34 -0
- package/dist/logger.js.map +1 -0
- 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 +176 -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 +61 -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/server.d.ts.map +1 -1
- package/dist/server.js +3 -11
- package/dist/server.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +167 -22
- 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 +2 -2
|
@@ -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;AAIrB,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,20 +1,22 @@
|
|
|
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";
|
|
5
4
|
import { SERVER_NAME } from "../const.js";
|
|
5
|
+
import { logger } from "../logger.js";
|
|
6
6
|
export class CredentialStore {
|
|
7
7
|
workspaceRoot;
|
|
8
8
|
mcpConfigDir;
|
|
9
9
|
credentialsPath;
|
|
10
10
|
configPath;
|
|
11
11
|
projectContextPath;
|
|
12
|
+
dataVisualizerPath;
|
|
12
13
|
constructor(workspaceRoot) {
|
|
13
14
|
this.workspaceRoot = workspaceRoot;
|
|
14
15
|
this.mcpConfigDir = path.join(workspaceRoot, `.${SERVER_NAME}`);
|
|
15
16
|
this.credentialsPath = path.join(this.mcpConfigDir, "credentials.json");
|
|
16
17
|
this.configPath = path.join(this.mcpConfigDir, "config.json");
|
|
17
18
|
this.projectContextPath = path.join(this.mcpConfigDir, "project-context.json");
|
|
19
|
+
this.dataVisualizerPath = path.join(this.mcpConfigDir, "data-visualizer.json");
|
|
18
20
|
}
|
|
19
21
|
setWorkspaceRoot(workspaceRoot) {
|
|
20
22
|
this.workspaceRoot = workspaceRoot;
|
|
@@ -22,6 +24,7 @@ export class CredentialStore {
|
|
|
22
24
|
this.credentialsPath = path.join(this.mcpConfigDir, "credentials.json");
|
|
23
25
|
this.configPath = path.join(this.mcpConfigDir, "config.json");
|
|
24
26
|
this.projectContextPath = path.join(this.mcpConfigDir, "project-context.json");
|
|
27
|
+
this.dataVisualizerPath = path.join(this.mcpConfigDir, "data-visualizer.json");
|
|
25
28
|
}
|
|
26
29
|
async ensureInitialized() {
|
|
27
30
|
await fs.mkdir(this.mcpConfigDir, { recursive: true });
|
|
@@ -31,7 +34,6 @@ export class CredentialStore {
|
|
|
31
34
|
await fs.writeFile(gitignorePath, gitignoreContent, { flag: "wx" });
|
|
32
35
|
}
|
|
33
36
|
catch (error) {
|
|
34
|
-
// Ignore if exists
|
|
35
37
|
if (error.code !== "EEXIST") {
|
|
36
38
|
throw error;
|
|
37
39
|
}
|
|
@@ -39,7 +41,6 @@ export class CredentialStore {
|
|
|
39
41
|
}
|
|
40
42
|
async saveCredentials(credentials) {
|
|
41
43
|
await this.ensureInitialized();
|
|
42
|
-
// Validate credentials before saving
|
|
43
44
|
if (!credentials.access_token || credentials.access_token.trim() === "") {
|
|
44
45
|
throw new Error("Invalid credentials: access_token is required");
|
|
45
46
|
}
|
|
@@ -48,89 +49,77 @@ export class CredentialStore {
|
|
|
48
49
|
token_type: credentials.token_type || "Bearer",
|
|
49
50
|
savedAt: new Date().toISOString(),
|
|
50
51
|
};
|
|
51
|
-
// Validate the credentials object
|
|
52
52
|
if (!this.validateCredentials(data)) {
|
|
53
53
|
throw new Error("Invalid credentials: JWT token validation failed");
|
|
54
54
|
}
|
|
55
55
|
const tempPath = `${this.credentialsPath}.tmp`;
|
|
56
|
-
await fs.writeFile(tempPath, JSON.stringify(data, null, 2), { mode: 0o600 }
|
|
57
|
-
);
|
|
56
|
+
await fs.writeFile(tempPath, JSON.stringify(data, null, 2), { mode: 0o600 });
|
|
58
57
|
await fs.rename(tempPath, this.credentialsPath);
|
|
59
|
-
|
|
58
|
+
logger.info("[CredentialStore] Credentials saved successfully");
|
|
60
59
|
}
|
|
61
60
|
async loadCredentials() {
|
|
62
61
|
try {
|
|
63
62
|
const data = await fs.readFile(this.credentialsPath, "utf8");
|
|
64
63
|
const credentials = JSON.parse(data);
|
|
65
|
-
// Validate credentials before returning
|
|
66
64
|
if (!this.validateCredentials(credentials)) {
|
|
67
|
-
|
|
65
|
+
logger.error("[CredentialStore] Stored credentials are invalid or expired");
|
|
68
66
|
return null;
|
|
69
67
|
}
|
|
70
68
|
return credentials;
|
|
71
69
|
}
|
|
72
70
|
catch (error) {
|
|
73
71
|
if (error.code === "ENOENT") {
|
|
74
|
-
return null;
|
|
72
|
+
return null;
|
|
75
73
|
}
|
|
76
74
|
throw error;
|
|
77
75
|
}
|
|
78
76
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Validate credentials including JWT token expiration
|
|
81
|
-
*/
|
|
82
77
|
validateCredentials(credentials) {
|
|
83
|
-
// Check if credentials object is valid
|
|
84
78
|
if (!credentials || !credentials.access_token) {
|
|
85
|
-
|
|
79
|
+
logger.error("[CredentialStore] Missing access token");
|
|
86
80
|
return false;
|
|
87
81
|
}
|
|
88
|
-
// Check token type
|
|
89
82
|
if (credentials.token_type !== "Bearer") {
|
|
90
|
-
|
|
83
|
+
logger.error("[CredentialStore] Invalid token type:", credentials.token_type);
|
|
91
84
|
return false;
|
|
92
85
|
}
|
|
93
|
-
// Decode and validate JWT token
|
|
94
86
|
try {
|
|
95
87
|
const decoded = jwt.decode(credentials.access_token, { complete: true });
|
|
96
88
|
if (!decoded || typeof decoded === "string") {
|
|
97
|
-
|
|
89
|
+
logger.error("[CredentialStore] Failed to decode JWT token");
|
|
98
90
|
return false;
|
|
99
91
|
}
|
|
100
|
-
// Check if token has expired
|
|
101
92
|
const payload = decoded.payload;
|
|
102
93
|
if (payload.exp) {
|
|
103
|
-
const expirationTime = payload.exp * 1000;
|
|
94
|
+
const expirationTime = payload.exp * 1000;
|
|
104
95
|
const currentTime = Date.now();
|
|
105
96
|
if (currentTime >= expirationTime) {
|
|
106
|
-
|
|
97
|
+
logger.error("[CredentialStore] JWT token has expired");
|
|
107
98
|
return false;
|
|
108
99
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
console.error(`[CredentialStore] Token valid for ${timeUntilExpiry} more minutes`);
|
|
100
|
+
const timeUntilExpiry = Math.floor((expirationTime - currentTime) / 1000 / 60);
|
|
101
|
+
logger.info(`[CredentialStore] Token valid for ${timeUntilExpiry} more minutes`);
|
|
112
102
|
}
|
|
113
103
|
else {
|
|
114
104
|
console.warn("[CredentialStore] JWT token does not have expiration field");
|
|
115
105
|
}
|
|
116
|
-
// Optionally validate other JWT claims
|
|
117
106
|
if (payload.iss) {
|
|
118
|
-
|
|
107
|
+
logger.info(`[CredentialStore] Token issued by: ${payload.iss}`);
|
|
119
108
|
}
|
|
120
109
|
if (payload.sub) {
|
|
121
|
-
|
|
110
|
+
logger.info(`[CredentialStore] Token subject: ${payload.sub}`);
|
|
122
111
|
}
|
|
123
112
|
return true;
|
|
124
113
|
}
|
|
125
114
|
catch (error) {
|
|
126
|
-
|
|
115
|
+
logger.error("[CredentialStore] Error validating JWT token:", error.message);
|
|
127
116
|
return false;
|
|
128
117
|
}
|
|
129
118
|
}
|
|
130
119
|
async deleteCredentials() {
|
|
131
120
|
try {
|
|
132
121
|
await fs.unlink(this.credentialsPath);
|
|
133
|
-
|
|
122
|
+
logger.info("[CredentialStore] Credentials deleted");
|
|
134
123
|
}
|
|
135
124
|
catch (error) {
|
|
136
125
|
if (error.code !== "ENOENT") {
|
|
@@ -138,10 +127,6 @@ export class CredentialStore {
|
|
|
138
127
|
}
|
|
139
128
|
}
|
|
140
129
|
}
|
|
141
|
-
/**
|
|
142
|
-
* Check if current stored credentials are valid
|
|
143
|
-
* @returns true if credentials exist and are valid, false otherwise
|
|
144
|
-
*/
|
|
145
130
|
async areCredentialsValid() {
|
|
146
131
|
const credentials = await this.loadCredentials();
|
|
147
132
|
return credentials !== null;
|
|
@@ -157,7 +142,7 @@ export class CredentialStore {
|
|
|
157
142
|
}
|
|
158
143
|
catch (error) {
|
|
159
144
|
if (error.code === "ENOENT") {
|
|
160
|
-
return null;
|
|
145
|
+
return null;
|
|
161
146
|
}
|
|
162
147
|
throw error;
|
|
163
148
|
}
|
|
@@ -179,7 +164,7 @@ export class CredentialStore {
|
|
|
179
164
|
}
|
|
180
165
|
catch (error) {
|
|
181
166
|
if (error.code === "ENOENT") {
|
|
182
|
-
return null;
|
|
167
|
+
return null;
|
|
183
168
|
}
|
|
184
169
|
throw error;
|
|
185
170
|
}
|
|
@@ -200,5 +185,42 @@ export class CredentialStore {
|
|
|
200
185
|
getMcpConfigDir() {
|
|
201
186
|
return this.mcpConfigDir;
|
|
202
187
|
}
|
|
188
|
+
async saveDataVisualizerInfo(projectExId, runtimeBackendAdminToken) {
|
|
189
|
+
await this.ensureInitialized();
|
|
190
|
+
const info = {
|
|
191
|
+
projectExId,
|
|
192
|
+
runtimeBackendAdminToken,
|
|
193
|
+
savedAt: new Date().toISOString(),
|
|
194
|
+
};
|
|
195
|
+
const tempPath = `${this.dataVisualizerPath}.tmp`;
|
|
196
|
+
await fs.writeFile(tempPath, JSON.stringify(info, null, 2), {
|
|
197
|
+
mode: 0o600,
|
|
198
|
+
});
|
|
199
|
+
await fs.rename(tempPath, this.dataVisualizerPath);
|
|
200
|
+
logger.info("[CredentialStore] Runtime backend admin token saved successfully for project:", projectExId);
|
|
201
|
+
}
|
|
202
|
+
async loadDataVisualizerInfo() {
|
|
203
|
+
try {
|
|
204
|
+
const data = await fs.readFile(this.dataVisualizerPath, "utf8");
|
|
205
|
+
return JSON.parse(data);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
if (error.code === "ENOENT") {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
async deleteDataVisualizerInfo() {
|
|
215
|
+
try {
|
|
216
|
+
await fs.unlink(this.dataVisualizerPath);
|
|
217
|
+
logger.info("[CredentialStore] Data visualizer info deleted");
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
if (error.code !== "ENOENT") {
|
|
221
|
+
throw error;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
203
225
|
}
|
|
204
226
|
//# 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":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,cAAc,CAAC;AAQ/B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,OAAO,eAAe;IAClB,aAAa,CAAS;IACtB,YAAY,CAAS;IACrB,eAAe,CAAS;IACxB,UAAU,CAAS;IACnB,kBAAkB,CAAS;IAC3B,kBAAkB,CAAS;IAEnC,YAAY,aAAqB;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CACjC,IAAI,CAAC,YAAY,EACjB,sBAAsB,CACvB,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CACjC,IAAI,CAAC,YAAY,EACjB,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,aAAqB;QACpC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CACjC,IAAI,CAAC,YAAY,EACjB,sBAAsB,CACvB,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CACjC,IAAI,CAAC,YAAY,EACjB,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACjE,MAAM,gBAAgB,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAwB;QAC5C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,IAAI,GAAsB;YAC9B,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,QAAQ;YAC9C,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAClC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,eAAe,MAAM,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,CAChB,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAC7B,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;QACF,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAC;YAE1D,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CACV,6DAA6D,CAC9D,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,WAA8B;QAExD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACvD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,WAAW,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,CACV,uCAAuC,EACvC,WAAW,CAAC,UAAU,CACvB,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC7D,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAyB,CAAC;YAClD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;gBAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE/B,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC;oBAClC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;oBACxD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAChC,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,IAAI,GAAG,EAAE,CAC3C,CAAC;gBACF,MAAM,CAAC,IAAI,CACT,qCAAqC,eAAe,eAAe,CACpE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,4DAA4D,CAC7D,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,sCAAsC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,oCAAoC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,+CAA+C,EAC9C,KAAe,CAAC,OAAO,CACzB,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACjD,OAAO,WAAW,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAiB;QAChC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QAC1C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAmB;YAC9B,WAAW;YACX,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;QAEF,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,kBAAkB,MAAM,CAAC;QAClD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,WAAmB,EACnB,wBAAgC;QAEhC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAuB;YAC/B,WAAW;YACX,wBAAwB;YACxB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAClC,CAAC;QAEF,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,kBAAkB,MAAM,CAAC;QAClD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC1D,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CACT,+EAA+E,EAC/E,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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;AAG1D,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,6 +1,6 @@
|
|
|
1
|
-
// src/auth/jwt-auth.ts
|
|
2
1
|
import { createServer } from "http";
|
|
3
2
|
import open from "open";
|
|
3
|
+
import { logger } from "../logger.js";
|
|
4
4
|
export class JwtAuth {
|
|
5
5
|
config;
|
|
6
6
|
constructor(config) {
|
|
@@ -12,7 +12,6 @@ export class JwtAuth {
|
|
|
12
12
|
const server = createServer();
|
|
13
13
|
server.on("error", (err) => {
|
|
14
14
|
if (err.code === "EADDRINUSE") {
|
|
15
|
-
// Try next port
|
|
16
15
|
resolve(this.findAvailablePort(port + 1));
|
|
17
16
|
}
|
|
18
17
|
else {
|
|
@@ -27,12 +26,10 @@ export class JwtAuth {
|
|
|
27
26
|
});
|
|
28
27
|
}
|
|
29
28
|
async authenticate() {
|
|
30
|
-
// Find available port
|
|
31
29
|
const callbackPort = await this.findAvailablePort();
|
|
32
30
|
const redirectUri = `http://localhost:${callbackPort}/callback`;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// Start callback server and wait for JWT token
|
|
31
|
+
logger.info(`[JwtAuth] Using callback URL: ${redirectUri}`);
|
|
32
|
+
logger.info(`[JwtAuth] Opening browser for authentication...`);
|
|
36
33
|
const jwtToken = await new Promise((resolve, reject) => {
|
|
37
34
|
const server = createServer(async (req, res) => {
|
|
38
35
|
if (!req.url) {
|
|
@@ -40,13 +37,11 @@ export class JwtAuth {
|
|
|
40
37
|
}
|
|
41
38
|
const url = new URL(req.url, `http://localhost:${callbackPort}`);
|
|
42
39
|
if (url.pathname === "/callback") {
|
|
43
|
-
|
|
44
|
-
console.error(`[JwtAuth] Callback received: ${req.url}`);
|
|
45
|
-
// Extract token parameter (the JWT token)
|
|
40
|
+
logger.info(`[JwtAuth] Callback received: ${req.url}`);
|
|
46
41
|
const token = url.searchParams.get("token");
|
|
47
42
|
if (!token || token.trim() === "") {
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
logger.info("[JwtAuth] No token parameter found in callback URL");
|
|
44
|
+
logger.info("[JwtAuth] Available parameters:", Array.from(url.searchParams.keys()).join(", "));
|
|
50
45
|
const errorHtml = this.errorPage("No authentication token received");
|
|
51
46
|
res.writeHead(400, { "Content-Type": "text/html" });
|
|
52
47
|
res.end(errorHtml);
|
|
@@ -54,11 +49,10 @@ export class JwtAuth {
|
|
|
54
49
|
reject(new Error("No token parameter in callback"));
|
|
55
50
|
return;
|
|
56
51
|
}
|
|
57
|
-
|
|
52
|
+
logger.info(`[JwtAuth] Token received (length: ${token.length} chars)`);
|
|
58
53
|
const html = this.successPage();
|
|
59
54
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
60
55
|
res.end(html);
|
|
61
|
-
// Close server after short delay to ensure response is sent
|
|
62
56
|
setTimeout(() => {
|
|
63
57
|
server.close();
|
|
64
58
|
resolve(token);
|
|
@@ -67,28 +61,24 @@ export class JwtAuth {
|
|
|
67
61
|
});
|
|
68
62
|
server.on("error", reject);
|
|
69
63
|
server.listen(callbackPort, async () => {
|
|
70
|
-
// Build authentication URL with redirect_uri parameter
|
|
71
64
|
const authUrl = new URL(this.config.authEndpoint);
|
|
72
65
|
authUrl.searchParams.set("redirect_uri", redirectUri);
|
|
73
|
-
|
|
74
|
-
// Open browser
|
|
66
|
+
logger.info(`[JwtAuth] Opening: ${authUrl.toString()}`);
|
|
75
67
|
try {
|
|
76
68
|
await open(authUrl.toString());
|
|
77
69
|
}
|
|
78
70
|
catch (error) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
71
|
+
logger.info("[JwtAuth] Could not open browser automatically");
|
|
72
|
+
logger.info("[JwtAuth] Please open this URL manually:");
|
|
73
|
+
logger.info(authUrl.toString());
|
|
82
74
|
}
|
|
83
75
|
});
|
|
84
|
-
// Timeout after 5 minutes
|
|
85
76
|
setTimeout(() => {
|
|
86
77
|
server.close();
|
|
87
78
|
reject(new Error("Authentication timeout - no response after 5 minutes"));
|
|
88
79
|
}, 300000);
|
|
89
80
|
});
|
|
90
|
-
|
|
91
|
-
// Return the JWT token directly as the access token
|
|
81
|
+
logger.info("[JwtAuth] JWT token received successfully");
|
|
92
82
|
return {
|
|
93
83
|
access_token: jwtToken,
|
|
94
84
|
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":"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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,6 +1,6 @@
|
|
|
1
1
|
import { JwtAuth } from "./jwt-auth.js";
|
|
2
2
|
import { getConfig } from "../config.js";
|
|
3
|
-
import {
|
|
3
|
+
import { logger } from "../logger.js";
|
|
4
4
|
export class TokenManager {
|
|
5
5
|
store;
|
|
6
6
|
constructor(credentialStore) {
|
|
@@ -9,25 +9,24 @@ export class TokenManager {
|
|
|
9
9
|
async getValidToken() {
|
|
10
10
|
let credentials = await this.store.loadCredentials();
|
|
11
11
|
if (!credentials) {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
logger.info(`No valid credentials found - starting authentication flow...`);
|
|
13
|
+
logger.info(`⚠️ Your browser will open for authentication`);
|
|
14
14
|
const config = await getConfig(this.store);
|
|
15
15
|
const jwtAuth = new JwtAuth(config);
|
|
16
16
|
try {
|
|
17
17
|
const tokens = await jwtAuth.authenticate();
|
|
18
18
|
await this.store.saveCredentials(tokens);
|
|
19
|
-
|
|
19
|
+
logger.info(`✓ Authentication successful!`);
|
|
20
20
|
credentials = await this.store.loadCredentials();
|
|
21
21
|
}
|
|
22
22
|
catch (error) {
|
|
23
|
-
|
|
23
|
+
logger.error(`✗ Authentication failed:`, error.message);
|
|
24
24
|
throw error;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
if (!credentials) {
|
|
28
28
|
throw new Error("Failed to load saved credentials");
|
|
29
29
|
}
|
|
30
|
-
// Return the JWT token directly (no refresh needed)
|
|
31
30
|
return credentials.access_token;
|
|
32
31
|
}
|
|
33
32
|
}
|
|
@@ -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,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,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,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAE7D,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,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;gBAE5C,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;gBACnE,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"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ5C,wBAAsB,SAAS,CAC7B,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,SAAS,CAAC,CAiBpB"}
|
package/dist/config.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
// src/config.ts
|
|
2
1
|
import { config as dotenvConfig } from "dotenv";
|
|
3
|
-
import {
|
|
4
|
-
// Load .env file
|
|
2
|
+
import { EDITOR_API_BASE_DEFAULT, BACKEND_AUTH_ENDPOINT_DEFAULT, } from "./const.js";
|
|
5
3
|
dotenvConfig();
|
|
6
4
|
export async function getConfig(credentialStore) {
|
|
7
|
-
// Try to load workspace-specific config
|
|
8
5
|
let config = await credentialStore.loadConfig();
|
|
9
6
|
if (!config) {
|
|
10
|
-
// Use environment variables with fallback to defaults
|
|
11
7
|
config = {
|
|
12
8
|
authEndpoint: process.env.BACKEND_AUTH_ENDPOINT || BACKEND_AUTH_ENDPOINT_DEFAULT,
|
|
13
|
-
apiBaseUrl: process.env.BACKEND_API_BASE ||
|
|
9
|
+
apiBaseUrl: process.env.BACKEND_API_BASE || EDITOR_API_BASE_DEFAULT,
|
|
14
10
|
callbackPort: process.env.LOCAL_CALLBACK_PORT
|
|
15
11
|
? parseInt(process.env.LOCAL_CALLBACK_PORT, 10)
|
|
16
12
|
: 8088,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGhD,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,CAAC;AAEf,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,eAAgC;IAGhC,IAAI,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,CAAC;IAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;QAEZ,MAAM,GAAG;YACP,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,6BAA6B;YACpE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,uBAAuB;YACnE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;gBAC3C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC/C,CAAC,CAAC,IAAI;SACT,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/const.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const SERVER_NAME = "zion-mcp";
|
|
2
2
|
export declare const BACKEND_AUTH_ENDPOINT_DEFAULT = "https://auth.functorz.com/login";
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const EDITOR_API_BASE_DEFAULT = "https://zionbackend.functorz.com";
|
|
4
|
+
export declare const ZERO_API_URL_TEMPLATE = "https://zion-app.functorz.com/zero/{projectExId}/api/graphql-v2";
|
|
4
5
|
//# sourceMappingURL=const.d.ts.map
|
package/dist/const.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,6BAA6B,oCAAoC,CAAC;AAC/E,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,6BAA6B,oCAAoC,CAAC;AAC/E,eAAO,MAAM,uBAAuB,qCAAqC,CAAC;AAC1E,eAAO,MAAM,qBAAqB,oEAAoE,CAAC"}
|
package/dist/const.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export const SERVER_NAME = "zion-mcp";
|
|
2
2
|
export const BACKEND_AUTH_ENDPOINT_DEFAULT = "https://auth.functorz.com/login";
|
|
3
|
-
export const
|
|
3
|
+
export const EDITOR_API_BASE_DEFAULT = "https://zionbackend.functorz.com";
|
|
4
|
+
export const ZERO_API_URL_TEMPLATE = "https://zion-app.functorz.com/zero/{projectExId}/api/graphql-v2";
|
|
4
5
|
//# sourceMappingURL=const.js.map
|
package/dist/const.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,6BAA6B,GAAG,iCAAiC,CAAC;AAC/E,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;AACtC,MAAM,CAAC,MAAM,6BAA6B,GAAG,iCAAiC,CAAC;AAC/E,MAAM,CAAC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AAC1E,MAAM,CAAC,MAAM,qBAAqB,GAAG,iEAAiE,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
type LogLevel = "debug" | "info" | "notice" | "warning" | "error" | "critical" | "alert" | "emergency";
|
|
3
|
+
export declare function setLoggerServer(server: McpServer): void;
|
|
4
|
+
export declare function logMessage(level: LogLevel, message: string, ...args: any[]): void;
|
|
5
|
+
export declare const logger: {
|
|
6
|
+
debug: (message: string, ...args: any[]) => void;
|
|
7
|
+
info: (message: string, ...args: any[]) => void;
|
|
8
|
+
notice: (message: string, ...args: any[]) => void;
|
|
9
|
+
warn: (message: string, ...args: any[]) => void;
|
|
10
|
+
error: (message: string, ...args: any[]) => void;
|
|
11
|
+
critical: (message: string, ...args: any[]) => void;
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAIvG,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAEhD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAoB1E;AAED,eAAO,MAAM,MAAM;qBACA,MAAM,WAAW,GAAG,EAAE;oBACvB,MAAM,WAAW,GAAG,EAAE;sBACpB,MAAM,WAAW,GAAG,EAAE;oBACxB,MAAM,WAAW,GAAG,EAAE;qBACrB,MAAM,WAAW,GAAG,EAAE;wBACnB,MAAM,WAAW,GAAG,EAAE;CAC3C,CAAC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SERVER_NAME } from "./const.js";
|
|
2
|
+
let activeServer = null;
|
|
3
|
+
export function setLoggerServer(server) {
|
|
4
|
+
activeServer = server;
|
|
5
|
+
}
|
|
6
|
+
export function logMessage(level, message, ...args) {
|
|
7
|
+
const formattedMessage = `[${SERVER_NAME}] ${message} ${args.length > 0 ? JSON.stringify(args) : ""}`;
|
|
8
|
+
if (activeServer) {
|
|
9
|
+
try {
|
|
10
|
+
activeServer.server.sendLoggingMessage({
|
|
11
|
+
level,
|
|
12
|
+
data: formattedMessage
|
|
13
|
+
}).catch((_e) => {
|
|
14
|
+
// Fallback if sendLoggingMessage fails (e.g. connection not ready)
|
|
15
|
+
console.error(`[${level.toUpperCase()}] ${formattedMessage}`);
|
|
16
|
+
});
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
catch (_e) {
|
|
20
|
+
// Ignore
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Fallback if no active server
|
|
24
|
+
console.error(`[${level.toUpperCase()}] ${formattedMessage}`);
|
|
25
|
+
}
|
|
26
|
+
export const logger = {
|
|
27
|
+
debug: (message, ...args) => logMessage("debug", message, ...args),
|
|
28
|
+
info: (message, ...args) => logMessage("info", message, ...args),
|
|
29
|
+
notice: (message, ...args) => logMessage("notice", message, ...args),
|
|
30
|
+
warn: (message, ...args) => logMessage("warning", message, ...args),
|
|
31
|
+
error: (message, ...args) => logMessage("error", message, ...args),
|
|
32
|
+
critical: (message, ...args) => logMessage("critical", message, ...args),
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAKzC,IAAI,YAAY,GAAqB,IAAI,CAAC;AAE1C,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAe,EAAE,OAAe,EAAE,GAAG,IAAW;IACzE,MAAM,gBAAgB,GAAG,IAAI,WAAW,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAEtG,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,YAAY,CAAC,MAAM,CAAC,kBAAkB,CAAC;gBACrC,KAAK;gBACL,IAAI,EAAE,gBAAgB;aACvB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;gBACd,mEAAmE;gBACnE,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,gBAAgB,EAAE,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YACH,OAAO;QACP,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACd,SAAS;QACX,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,gBAAgB,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjF,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/E,MAAM,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACnF,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClF,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjF,QAAQ,EAAE,CAAC,OAAe,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACxF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/mock-data/converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,cAAc,EAAE,cAAc,GAC7B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAyCrB"}
|