@tunnelhub/mcp 1.0.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/CONTRIBUTING.md +70 -0
- package/LICENSE +21 -0
- package/README.md +322 -0
- package/dist/auth/browser-auth.d.ts +16 -0
- package/dist/auth/browser-auth.d.ts.map +1 -0
- package/dist/auth/browser-auth.js +144 -0
- package/dist/auth/browser-auth.js.map +1 -0
- package/dist/auth/cognito-client.d.ts +14 -0
- package/dist/auth/cognito-client.d.ts.map +1 -0
- package/dist/auth/cognito-client.js +69 -0
- package/dist/auth/cognito-client.js.map +1 -0
- package/dist/auth/session-manager.d.ts +17 -0
- package/dist/auth/session-manager.d.ts.map +1 -0
- package/dist/auth/session-manager.js +152 -0
- package/dist/auth/session-manager.js.map +1 -0
- package/dist/auth/token-manager.d.ts +50 -0
- package/dist/auth/token-manager.d.ts.map +1 -0
- package/dist/auth/token-manager.js +107 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +3 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +3 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +7 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +46 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/api-gateway/index.d.ts +3 -0
- package/dist/tools/api-gateway/index.d.ts.map +1 -0
- package/dist/tools/api-gateway/index.js +9 -0
- package/dist/tools/api-gateway/index.js.map +1 -0
- package/dist/tools/automations/index.d.ts +3 -0
- package/dist/tools/automations/index.d.ts.map +1 -0
- package/dist/tools/automations/index.js +201 -0
- package/dist/tools/automations/index.js.map +1 -0
- package/dist/tools/integrations/index.d.ts +3 -0
- package/dist/tools/integrations/index.d.ts.map +1 -0
- package/dist/tools/integrations/index.js +10 -0
- package/dist/tools/integrations/index.js.map +1 -0
- package/dist/tools/monitoring/index.d.ts +3 -0
- package/dist/tools/monitoring/index.d.ts.map +1 -0
- package/dist/tools/monitoring/index.js +331 -0
- package/dist/tools/monitoring/index.js.map +1 -0
- package/dist/tools/packages/index.d.ts +3 -0
- package/dist/tools/packages/index.d.ts.map +1 -0
- package/dist/tools/packages/index.js +7 -0
- package/dist/tools/packages/index.js.map +1 -0
- package/dist/tools/session/current-session.d.ts +35 -0
- package/dist/tools/session/current-session.d.ts.map +1 -0
- package/dist/tools/session/current-session.js +32 -0
- package/dist/tools/session/current-session.js.map +1 -0
- package/dist/tools/session/index.d.ts +3 -0
- package/dist/tools/session/index.d.ts.map +1 -0
- package/dist/tools/session/index.js +16 -0
- package/dist/tools/session/index.js.map +1 -0
- package/dist/tools/session/list-environments.d.ts +35 -0
- package/dist/tools/session/list-environments.d.ts.map +1 -0
- package/dist/tools/session/list-environments.js +36 -0
- package/dist/tools/session/list-environments.js.map +1 -0
- package/dist/tools/session/list-sessions.d.ts +35 -0
- package/dist/tools/session/list-sessions.d.ts.map +1 -0
- package/dist/tools/session/list-sessions.js +37 -0
- package/dist/tools/session/list-sessions.js.map +1 -0
- package/dist/tools/session/login.d.ts +34 -0
- package/dist/tools/session/login.d.ts.map +1 -0
- package/dist/tools/session/login.js +27 -0
- package/dist/tools/session/login.js.map +1 -0
- package/dist/tools/session/logout.d.ts +42 -0
- package/dist/tools/session/logout.d.ts.map +1 -0
- package/dist/tools/session/logout.js +32 -0
- package/dist/tools/session/logout.js.map +1 -0
- package/dist/tools/session/switch-session.d.ts +42 -0
- package/dist/tools/session/switch-session.d.ts.map +1 -0
- package/dist/tools/session/switch-session.js +27 -0
- package/dist/tools/session/switch-session.js.map +1 -0
- package/dist/tools/tenants/index.d.ts +3 -0
- package/dist/tools/tenants/index.d.ts.map +1 -0
- package/dist/tools/tenants/index.js +61 -0
- package/dist/tools/tenants/index.js.map +1 -0
- package/dist/tools/users/index.d.ts +3 -0
- package/dist/tools/users/index.d.ts.map +1 -0
- package/dist/tools/users/index.js +7 -0
- package/dist/tools/users/index.js.map +1 -0
- package/dist/types/api.d.ts +108 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +2 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/dynamodb.d.ts +54 -0
- package/dist/types/dynamodb.d.ts.map +1 -0
- package/dist/types/dynamodb.js +55 -0
- package/dist/types/dynamodb.js.map +1 -0
- package/dist/types/mcp.d.ts +271 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +62 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/utils/api-client.d.ts +44 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +201 -0
- package/dist/utils/api-client.js.map +1 -0
- package/dist/utils/error-handler.d.ts +28 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +58 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AuthContext, Session } from '../types/mcp.js';
|
|
2
|
+
export declare class SessionManager {
|
|
3
|
+
private readonly tokenManager;
|
|
4
|
+
private readonly cognitoClient;
|
|
5
|
+
private readonly apiClient;
|
|
6
|
+
constructor();
|
|
7
|
+
createSession(): Promise<Session>;
|
|
8
|
+
switchEnvironment(environmentId: string): Promise<Session>;
|
|
9
|
+
private resolveFrontendUrl;
|
|
10
|
+
getCurrentContext(): Promise<AuthContext | null>;
|
|
11
|
+
getAllSessions(): Session[];
|
|
12
|
+
getCurrentSession(): Session | null;
|
|
13
|
+
logout(sessionId?: string): void;
|
|
14
|
+
private refreshSession;
|
|
15
|
+
private getRequiredSession;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/auth/session-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI5D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;;IAQhC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAgEjC,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBhE,OAAO,CAAC,kBAAkB;IAQpB,iBAAiB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA2BtD,cAAc,IAAI,OAAO,EAAE;IAI3B,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAInC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;YAYlB,cAAc;YAed,kBAAkB;CAQjC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { BrowserAuthFlow } from './browser-auth.js';
|
|
2
|
+
import { CognitoClient } from './cognito-client.js';
|
|
3
|
+
import { TokenManager } from './token-manager.js';
|
|
4
|
+
import { ApiClient } from '../utils/api-client.js';
|
|
5
|
+
import { MCPError } from '../utils/error-handler.js';
|
|
6
|
+
export class SessionManager {
|
|
7
|
+
tokenManager;
|
|
8
|
+
cognitoClient;
|
|
9
|
+
apiClient;
|
|
10
|
+
constructor() {
|
|
11
|
+
this.tokenManager = new TokenManager();
|
|
12
|
+
this.cognitoClient = new CognitoClient();
|
|
13
|
+
this.apiClient = new ApiClient();
|
|
14
|
+
}
|
|
15
|
+
async createSession() {
|
|
16
|
+
const apiHost = this.apiClient.getDefaultApiHost();
|
|
17
|
+
const preferredSession = this.getCurrentSession() || this.getAllSessions()[0] || null;
|
|
18
|
+
const frontendUrl = preferredSession?.frontendUrl || this.apiClient.getDefaultFrontendUrl();
|
|
19
|
+
const preferredTenantId = preferredSession?.tenantId;
|
|
20
|
+
const browserAuth = new BrowserAuthFlow();
|
|
21
|
+
const tokens = await browserAuth.authenticate(frontendUrl, preferredTenantId);
|
|
22
|
+
const currentUser = await this.apiClient.getCurrentUser(tokens.idToken);
|
|
23
|
+
const tenantId = currentUser.tenantId;
|
|
24
|
+
if (!tenantId) {
|
|
25
|
+
throw new MCPError('Authenticated user does not include tenantId.', 'TENANT_NOT_FOUND');
|
|
26
|
+
}
|
|
27
|
+
const publicTenant = await this.apiClient.getTenantPublic(tenantId);
|
|
28
|
+
const resolvedFrontendUrl = this.resolveFrontendUrl(publicTenant);
|
|
29
|
+
const bootstrapSession = {
|
|
30
|
+
id: tenantId,
|
|
31
|
+
tenantId,
|
|
32
|
+
tenantName: publicTenant.accountName,
|
|
33
|
+
environmentId: '',
|
|
34
|
+
environmentName: '',
|
|
35
|
+
apiHost,
|
|
36
|
+
frontendUrl: resolvedFrontendUrl,
|
|
37
|
+
clientId: publicTenant.cognito.dedicated?.userPoolClientId ||
|
|
38
|
+
publicTenant.cognito.shared?.userPoolClientId ||
|
|
39
|
+
currentUser.userPoolClientId ||
|
|
40
|
+
'',
|
|
41
|
+
tokens: {
|
|
42
|
+
idToken: tokens.idToken,
|
|
43
|
+
accessToken: tokens.accessToken,
|
|
44
|
+
refreshToken: tokens.refreshToken,
|
|
45
|
+
expiresAt: Date.now() + tokens.expiresIn * 1000,
|
|
46
|
+
},
|
|
47
|
+
user: {
|
|
48
|
+
id: currentUser.uuid,
|
|
49
|
+
email: currentUser.email,
|
|
50
|
+
role: currentUser.role,
|
|
51
|
+
timezone: currentUser.timezone || 'America/Sao_Paulo',
|
|
52
|
+
},
|
|
53
|
+
lastUsed: new Date().toISOString(),
|
|
54
|
+
};
|
|
55
|
+
this.apiClient.setSession(bootstrapSession);
|
|
56
|
+
const environments = await this.apiClient.getEnvironments(bootstrapSession);
|
|
57
|
+
const defaultEnvironment = environments.find((environment) => environment.isProductive) || environments[0];
|
|
58
|
+
if (!defaultEnvironment) {
|
|
59
|
+
throw new MCPError('No environments available for authenticated user.', 'ENVIRONMENT_NOT_FOUND');
|
|
60
|
+
}
|
|
61
|
+
const session = {
|
|
62
|
+
...bootstrapSession,
|
|
63
|
+
environmentId: defaultEnvironment.uuid,
|
|
64
|
+
environmentName: defaultEnvironment.name,
|
|
65
|
+
};
|
|
66
|
+
this.tokenManager.saveSession(session);
|
|
67
|
+
this.tokenManager.setCurrentSessionId(session.id);
|
|
68
|
+
return session;
|
|
69
|
+
}
|
|
70
|
+
async switchEnvironment(environmentId) {
|
|
71
|
+
const session = await this.getRequiredSession();
|
|
72
|
+
const environments = await this.apiClient.getEnvironments(session);
|
|
73
|
+
const environment = environments.find((item) => item.uuid === environmentId);
|
|
74
|
+
if (!environment) {
|
|
75
|
+
throw new MCPError(`Environment ${environmentId} not found for current tenant.`, 'ENVIRONMENT_NOT_FOUND');
|
|
76
|
+
}
|
|
77
|
+
const updatedSession = {
|
|
78
|
+
...session,
|
|
79
|
+
environmentId: environment.uuid,
|
|
80
|
+
environmentName: environment.name,
|
|
81
|
+
lastUsed: new Date().toISOString(),
|
|
82
|
+
};
|
|
83
|
+
this.tokenManager.saveSession(updatedSession);
|
|
84
|
+
this.tokenManager.setCurrentSessionId(updatedSession.id);
|
|
85
|
+
return updatedSession;
|
|
86
|
+
}
|
|
87
|
+
resolveFrontendUrl(publicTenant) {
|
|
88
|
+
if (publicTenant.domain) {
|
|
89
|
+
return `https://${publicTenant.domain}.tunnelhub.io`;
|
|
90
|
+
}
|
|
91
|
+
return this.apiClient.getDefaultFrontendUrl();
|
|
92
|
+
}
|
|
93
|
+
async getCurrentContext() {
|
|
94
|
+
const session = this.tokenManager.getCurrentSession();
|
|
95
|
+
if (!session) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
if (this.tokenManager.isTokenExpiring(session)) {
|
|
99
|
+
await this.refreshSession(session.id);
|
|
100
|
+
}
|
|
101
|
+
const freshSession = this.tokenManager.getCurrentSession();
|
|
102
|
+
if (!freshSession) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
if (!freshSession.user.timezone) {
|
|
106
|
+
freshSession.user.timezone = 'America/Sao_Paulo';
|
|
107
|
+
this.tokenManager.saveSession(freshSession);
|
|
108
|
+
}
|
|
109
|
+
this.apiClient.setSession(freshSession);
|
|
110
|
+
return {
|
|
111
|
+
session: freshSession,
|
|
112
|
+
isValid: true,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
getAllSessions() {
|
|
116
|
+
return this.tokenManager.getSessionsSortedByLastUsed();
|
|
117
|
+
}
|
|
118
|
+
getCurrentSession() {
|
|
119
|
+
return this.tokenManager.getCurrentSession();
|
|
120
|
+
}
|
|
121
|
+
logout(sessionId) {
|
|
122
|
+
if (sessionId) {
|
|
123
|
+
this.tokenManager.deleteSession(sessionId);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const currentSession = this.tokenManager.getCurrentSessionId();
|
|
127
|
+
if (currentSession) {
|
|
128
|
+
this.tokenManager.deleteSession(currentSession);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async refreshSession(sessionId) {
|
|
132
|
+
const session = this.tokenManager.getSession(sessionId);
|
|
133
|
+
if (!session) {
|
|
134
|
+
throw new MCPError('Session not found.', 'SESSION_NOT_FOUND');
|
|
135
|
+
}
|
|
136
|
+
const refreshedTokens = await this.cognitoClient.refreshTokens(session.clientId, session.tokens.refreshToken);
|
|
137
|
+
this.tokenManager.updateSessionTokens(sessionId, {
|
|
138
|
+
idToken: refreshedTokens.idToken,
|
|
139
|
+
accessToken: refreshedTokens.accessToken,
|
|
140
|
+
refreshToken: refreshedTokens.refreshToken,
|
|
141
|
+
expiresAt: Date.now() + refreshedTokens.expiresIn * 1000,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
async getRequiredSession() {
|
|
145
|
+
const authContext = await this.getCurrentContext();
|
|
146
|
+
if (!authContext?.session) {
|
|
147
|
+
throw new MCPError('Not authenticated. Use login_tunnelhub first.', 'AUTH_REQUIRED');
|
|
148
|
+
}
|
|
149
|
+
return authContext.session;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/auth/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Session } from '../types/mcp.js';
|
|
2
|
+
export declare class TokenManager {
|
|
3
|
+
private config;
|
|
4
|
+
constructor();
|
|
5
|
+
/**
|
|
6
|
+
* Get all sessions
|
|
7
|
+
*/
|
|
8
|
+
getAllSessions(): Record<string, Session>;
|
|
9
|
+
/**
|
|
10
|
+
* Get a specific session
|
|
11
|
+
*/
|
|
12
|
+
getSession(sessionId: string): Session | null;
|
|
13
|
+
/**
|
|
14
|
+
* Save or update a session
|
|
15
|
+
*/
|
|
16
|
+
saveSession(session: Session): void;
|
|
17
|
+
/**
|
|
18
|
+
* Delete a session
|
|
19
|
+
*/
|
|
20
|
+
deleteSession(sessionId: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Get current session ID
|
|
23
|
+
*/
|
|
24
|
+
getCurrentSessionId(): string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Set current session ID
|
|
27
|
+
*/
|
|
28
|
+
setCurrentSessionId(sessionId: string | null): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get current session
|
|
31
|
+
*/
|
|
32
|
+
getCurrentSession(): Session | null;
|
|
33
|
+
/**
|
|
34
|
+
* Update session tokens
|
|
35
|
+
*/
|
|
36
|
+
updateSessionTokens(sessionId: string, tokens: Session['tokens']): void;
|
|
37
|
+
/**
|
|
38
|
+
* Check if token is expired or expiring soon
|
|
39
|
+
*/
|
|
40
|
+
isTokenExpiring(session: Session, bufferMinutes?: number): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Clear all sessions
|
|
43
|
+
*/
|
|
44
|
+
clearAllSessions(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Get sessions sorted by last used
|
|
47
|
+
*/
|
|
48
|
+
getSessionsSortedByLastUsed(): Session[];
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=token-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI/C,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAc;;IAS5B;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAK7C;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASnC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAWtC;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAInD;;OAEG;IACH,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAMnC;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IASvE;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,SAAI,GAAG,OAAO;IAQ7D;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,2BAA2B,IAAI,OAAO,EAAE;CAQzC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import Configstore from 'configstore';
|
|
2
|
+
const CONFIG_KEY = 'tunnelhub-mcp';
|
|
3
|
+
export class TokenManager {
|
|
4
|
+
config;
|
|
5
|
+
constructor() {
|
|
6
|
+
this.config = new Configstore(CONFIG_KEY, {
|
|
7
|
+
sessions: {},
|
|
8
|
+
currentSession: null
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get all sessions
|
|
13
|
+
*/
|
|
14
|
+
getAllSessions() {
|
|
15
|
+
return this.config.get('sessions') || {};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get a specific session
|
|
19
|
+
*/
|
|
20
|
+
getSession(sessionId) {
|
|
21
|
+
const sessions = this.getAllSessions();
|
|
22
|
+
return sessions[sessionId] || null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Save or update a session
|
|
26
|
+
*/
|
|
27
|
+
saveSession(session) {
|
|
28
|
+
const sessions = this.getAllSessions();
|
|
29
|
+
sessions[session.id] = {
|
|
30
|
+
...session,
|
|
31
|
+
lastUsed: new Date().toISOString()
|
|
32
|
+
};
|
|
33
|
+
this.config.set('sessions', sessions);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Delete a session
|
|
37
|
+
*/
|
|
38
|
+
deleteSession(sessionId) {
|
|
39
|
+
const sessions = this.getAllSessions();
|
|
40
|
+
delete sessions[sessionId];
|
|
41
|
+
this.config.set('sessions', sessions);
|
|
42
|
+
// If this was the current session, clear it
|
|
43
|
+
if (this.getCurrentSessionId() === sessionId) {
|
|
44
|
+
this.setCurrentSessionId(null);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get current session ID
|
|
49
|
+
*/
|
|
50
|
+
getCurrentSessionId() {
|
|
51
|
+
return this.config.get('currentSession') || null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Set current session ID
|
|
55
|
+
*/
|
|
56
|
+
setCurrentSessionId(sessionId) {
|
|
57
|
+
this.config.set('currentSession', sessionId);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get current session
|
|
61
|
+
*/
|
|
62
|
+
getCurrentSession() {
|
|
63
|
+
const sessionId = this.getCurrentSessionId();
|
|
64
|
+
if (!sessionId)
|
|
65
|
+
return null;
|
|
66
|
+
return this.getSession(sessionId);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Update session tokens
|
|
70
|
+
*/
|
|
71
|
+
updateSessionTokens(sessionId, tokens) {
|
|
72
|
+
const session = this.getSession(sessionId);
|
|
73
|
+
if (!session)
|
|
74
|
+
return;
|
|
75
|
+
session.tokens = tokens;
|
|
76
|
+
session.lastUsed = new Date().toISOString();
|
|
77
|
+
this.saveSession(session);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if token is expired or expiring soon
|
|
81
|
+
*/
|
|
82
|
+
isTokenExpiring(session, bufferMinutes = 5) {
|
|
83
|
+
const now = Date.now();
|
|
84
|
+
const expiresAt = session.tokens.expiresAt;
|
|
85
|
+
const bufferMs = bufferMinutes * 60 * 1000;
|
|
86
|
+
return now >= (expiresAt - bufferMs);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Clear all sessions
|
|
90
|
+
*/
|
|
91
|
+
clearAllSessions() {
|
|
92
|
+
this.config.set('sessions', {});
|
|
93
|
+
this.config.set('currentSession', null);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get sessions sorted by last used
|
|
97
|
+
*/
|
|
98
|
+
getSessionsSortedByLastUsed() {
|
|
99
|
+
const sessions = Object.values(this.getAllSessions());
|
|
100
|
+
return sessions.sort((a, b) => {
|
|
101
|
+
const dateA = new Date(a.lastUsed).getTime();
|
|
102
|
+
const dateB = new Date(b.lastUsed).getTime();
|
|
103
|
+
return dateB - dateA;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=token-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAKxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,OAAkB;IAChD,0BAA0B;IAC1B,6BAA6B;IAC7B,uBAAuB;IACvB,0BAA0B;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAK1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,OAAkB;IAClD,4BAA4B;IAC5B,iBAAiB;IACjB,YAAY;IACZ,eAAe;AACjB,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export declare class TunnelHubMCPServer {
|
|
3
|
+
private readonly server;
|
|
4
|
+
private readonly sessionManager;
|
|
5
|
+
private readonly apiClient;
|
|
6
|
+
constructor();
|
|
7
|
+
private setupServer;
|
|
8
|
+
getServer(): McpServer;
|
|
9
|
+
}
|
|
10
|
+
declare const _default: McpServer;
|
|
11
|
+
export default _default;
|
|
12
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;;IAYtC,OAAO,CAAC,WAAW;IAqBnB,SAAS,IAAI,SAAS;CAGvB;;AAID,wBAA2C"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { SessionManager } from './auth/session-manager.js';
|
|
3
|
+
import { registerAutomationTools } from './tools/automations/index.js';
|
|
4
|
+
import { registerMonitoringTools } from './tools/monitoring/index.js';
|
|
5
|
+
import { registerSessionTools } from './tools/session/index.js';
|
|
6
|
+
import { registerTenantTools } from './tools/tenants/index.js';
|
|
7
|
+
import { ApiClient } from './utils/api-client.js';
|
|
8
|
+
import { MCPError } from './utils/error-handler.js';
|
|
9
|
+
export class TunnelHubMCPServer {
|
|
10
|
+
server;
|
|
11
|
+
sessionManager;
|
|
12
|
+
apiClient;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.server = new McpServer({
|
|
15
|
+
name: 'tunnelhub-mcp-server',
|
|
16
|
+
version: '1.0.0',
|
|
17
|
+
});
|
|
18
|
+
this.sessionManager = new SessionManager();
|
|
19
|
+
this.apiClient = new ApiClient();
|
|
20
|
+
this.setupServer();
|
|
21
|
+
}
|
|
22
|
+
setupServer() {
|
|
23
|
+
const context = {
|
|
24
|
+
sessionManager: this.sessionManager,
|
|
25
|
+
apiClient: this.apiClient,
|
|
26
|
+
getSession: async () => {
|
|
27
|
+
const authContext = await this.sessionManager.getCurrentContext();
|
|
28
|
+
if (!authContext?.session) {
|
|
29
|
+
throw new MCPError('Not authenticated. Use login_tunnelhub first.', 'AUTH_REQUIRED');
|
|
30
|
+
}
|
|
31
|
+
this.apiClient.setSession(authContext.session);
|
|
32
|
+
return authContext.session;
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
registerSessionTools(this.server, context);
|
|
36
|
+
registerTenantTools(this.server, context);
|
|
37
|
+
registerAutomationTools(this.server, context);
|
|
38
|
+
registerMonitoringTools(this.server, context);
|
|
39
|
+
}
|
|
40
|
+
getServer() {
|
|
41
|
+
return this.server;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const tunnelHubServer = new TunnelHubMCPServer();
|
|
45
|
+
export default tunnelHubServer.getServer();
|
|
46
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAY;IAElB,cAAc,CAAiB;IAE/B,SAAS,CAAY;IAEtC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,MAAM,OAAO,GAAgB;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;gBAClE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE,eAAe,CAAC,CAAC;gBACvF,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B,CAAC;SACF,CAAC;QAEF,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,MAAM,eAAe,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEjD,eAAe,eAAe,CAAC,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/api-gateway/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAOnF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/api-gateway/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAAC,OAAkB,EAAE,QAAiB;IAC3E,oCAAoC;IACpC,sBAAsB;IACtB,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/automations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqNzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAOjF"}
|