@botuyo/mcp 0.2.6 → 0.2.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/client.d.ts +2 -0
- package/dist/client.js +5 -0
- package/dist/client.js.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/switch_tenant.d.ts +68 -0
- package/dist/tools/switch_tenant.js +104 -0
- package/dist/tools/switch_tenant.js.map +1 -0
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export declare class BotuyoApiClient {
|
|
|
19
19
|
private config;
|
|
20
20
|
private authInfo;
|
|
21
21
|
constructor(config: BotuyoClientConfig);
|
|
22
|
+
/** Hot-swap the JWT token (used by switch_tenant) */
|
|
23
|
+
setToken(token: string): void;
|
|
22
24
|
/** Verify the stored JWT is still valid by calling GET /api/auth/me */
|
|
23
25
|
verify(): Promise<AuthInfo>;
|
|
24
26
|
/** Make an authenticated GET request */
|
package/dist/client.js
CHANGED
|
@@ -11,6 +11,11 @@ export class BotuyoApiClient {
|
|
|
11
11
|
constructor(config) {
|
|
12
12
|
this.config = config;
|
|
13
13
|
}
|
|
14
|
+
/** Hot-swap the JWT token (used by switch_tenant) */
|
|
15
|
+
setToken(token) {
|
|
16
|
+
this.config = { ...this.config, token };
|
|
17
|
+
this.authInfo = null; // reset cached auth info
|
|
18
|
+
}
|
|
14
19
|
/** Verify the stored JWT is still valid by calling GET /api/auth/me */
|
|
15
20
|
async verify() {
|
|
16
21
|
if (this.authInfo)
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,OAAO,eAAe;IAClB,MAAM,CAAoB;IAC1B,QAAQ,GAAoB,IAAI,CAAA;IAExC,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,qDAAqD;IACrD,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAA;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA,CAAC,yBAAyB;IAChD,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAA;QAEvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,cAAc,EAAE;YAC3D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE;SAC1D,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,KAAK,IAAI,eAAe,8BAA8B,CAAC,CAAA;QAC7G,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;QAC3B,IAAI,CAAC,QAAQ,GAAG;YACd,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;YACnC,UAAU,EAAE,EAAE,EAAE,oCAAoC;YACpD,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,QAAQ;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAA;QAED,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,GAAG,CAAU,IAAY;QAC7B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE;YACtD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE;SAC1D,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,IAAI,CAAU,IAAY,EAAE,IAAa;QAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC5C,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,GAAG,CAAU,IAAY,EAAE,IAAa;QAC5C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE;YACtD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC5C,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,GAAa;QACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAEtC,uBAAuB;QACvB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACpE,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,GAAa;QACnC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;YACrD,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,CAAA;YAC7D,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;CACF"}
|
package/dist/tools/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { UPSERT_STAGE_TOOL, upsertStageHandler } from './upsert_stage.js';
|
|
|
11
11
|
import { LIST_TOOLS_TOOL, listToolsHandler } from './list_available_tools.js';
|
|
12
12
|
import { UPDATE_ENABLED_TOOLS_TOOL, updateEnabledToolsHandler } from './update_enabled_tools.js';
|
|
13
13
|
import { PUBLISH_AGENT_TOOL, publishAgentHandler } from './publish_agent.js';
|
|
14
|
+
import { SWITCH_TENANT_TOOL, switchTenantHandler } from './switch_tenant.js';
|
|
14
15
|
export const ALL_TOOLS = [
|
|
15
16
|
LIST_AGENTS_TOOL,
|
|
16
17
|
GET_AGENT_TOOL,
|
|
@@ -21,6 +22,7 @@ export const ALL_TOOLS = [
|
|
|
21
22
|
LIST_TOOLS_TOOL,
|
|
22
23
|
UPDATE_ENABLED_TOOLS_TOOL,
|
|
23
24
|
PUBLISH_AGENT_TOOL,
|
|
25
|
+
SWITCH_TENANT_TOOL,
|
|
24
26
|
];
|
|
25
27
|
export const TOOL_HANDLERS = {
|
|
26
28
|
list_agents: listAgentsHandler,
|
|
@@ -32,5 +34,6 @@ export const TOOL_HANDLERS = {
|
|
|
32
34
|
list_available_tools: listToolsHandler,
|
|
33
35
|
update_enabled_tools: updateEnabledToolsHandler,
|
|
34
36
|
publish_agent: publishAgentHandler,
|
|
37
|
+
switch_tenant: switchTenantHandler,
|
|
35
38
|
};
|
|
36
39
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,8BAA8B;AAC9B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC7E,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE5E,MAAM,CAAC,MAAM,SAAS,GAAW;IAC/B,gBAAgB;IAChB,cAAc;IACd,qBAAqB;IACrB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,yBAAyB;IACzB,kBAAkB;CACnB,CAAA;AAID,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,WAAW,EAAE,iBAAiB;IAC9B,SAAS,EAAE,eAAe;IAC1B,gBAAgB,EAAE,qBAAqB;IACvC,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,oBAAoB,EAAE,gBAAgB;IACtC,oBAAoB,EAAE,yBAAyB;IAC/C,aAAa,EAAE,mBAAmB;CACnC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,8BAA8B;AAC9B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC7E,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE5E,MAAM,CAAC,MAAM,SAAS,GAAW;IAC/B,gBAAgB;IAChB,cAAc;IACd,qBAAqB;IACrB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,yBAAyB;IACzB,kBAAkB;IAClB,kBAAkB;CACnB,CAAA;AAID,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,WAAW,EAAE,iBAAiB;IAC9B,SAAS,EAAE,eAAe;IAC1B,gBAAgB,EAAE,qBAAqB;IACvC,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,oBAAoB,EAAE,gBAAgB;IACtC,oBAAoB,EAAE,yBAAyB;IAC/C,aAAa,EAAE,mBAAmB;IAClC,aAAa,EAAE,mBAAmB;CACnC,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { BotuyoApiClient } from '../client.js';
|
|
3
|
+
export declare const SWITCH_TENANT_TOOL: Tool;
|
|
4
|
+
export declare function switchTenantHandler(client: BotuyoApiClient, args: Record<string, unknown>): Promise<{
|
|
5
|
+
success: boolean;
|
|
6
|
+
activeTenantId: string;
|
|
7
|
+
activeTenantName: string;
|
|
8
|
+
tenants: {
|
|
9
|
+
tenantId: string;
|
|
10
|
+
role: string;
|
|
11
|
+
isActive: boolean;
|
|
12
|
+
}[];
|
|
13
|
+
hint: string;
|
|
14
|
+
error?: undefined;
|
|
15
|
+
availableTenants?: undefined;
|
|
16
|
+
message?: undefined;
|
|
17
|
+
tenantId?: undefined;
|
|
18
|
+
tenantName?: undefined;
|
|
19
|
+
role?: undefined;
|
|
20
|
+
} | {
|
|
21
|
+
success: boolean;
|
|
22
|
+
error: string;
|
|
23
|
+
availableTenants: string[];
|
|
24
|
+
activeTenantId?: undefined;
|
|
25
|
+
activeTenantName?: undefined;
|
|
26
|
+
tenants?: undefined;
|
|
27
|
+
hint?: undefined;
|
|
28
|
+
message?: undefined;
|
|
29
|
+
tenantId?: undefined;
|
|
30
|
+
tenantName?: undefined;
|
|
31
|
+
role?: undefined;
|
|
32
|
+
} | {
|
|
33
|
+
success: boolean;
|
|
34
|
+
message: string;
|
|
35
|
+
activeTenantId?: undefined;
|
|
36
|
+
activeTenantName?: undefined;
|
|
37
|
+
tenants?: undefined;
|
|
38
|
+
hint?: undefined;
|
|
39
|
+
error?: undefined;
|
|
40
|
+
availableTenants?: undefined;
|
|
41
|
+
tenantId?: undefined;
|
|
42
|
+
tenantName?: undefined;
|
|
43
|
+
role?: undefined;
|
|
44
|
+
} | {
|
|
45
|
+
success: boolean;
|
|
46
|
+
error: any;
|
|
47
|
+
activeTenantId?: undefined;
|
|
48
|
+
activeTenantName?: undefined;
|
|
49
|
+
tenants?: undefined;
|
|
50
|
+
hint?: undefined;
|
|
51
|
+
availableTenants?: undefined;
|
|
52
|
+
message?: undefined;
|
|
53
|
+
tenantId?: undefined;
|
|
54
|
+
tenantName?: undefined;
|
|
55
|
+
role?: undefined;
|
|
56
|
+
} | {
|
|
57
|
+
success: boolean;
|
|
58
|
+
message: string;
|
|
59
|
+
tenantId: string;
|
|
60
|
+
tenantName: string;
|
|
61
|
+
role: any;
|
|
62
|
+
activeTenantId?: undefined;
|
|
63
|
+
activeTenantName?: undefined;
|
|
64
|
+
tenants?: undefined;
|
|
65
|
+
hint?: undefined;
|
|
66
|
+
error?: undefined;
|
|
67
|
+
availableTenants?: undefined;
|
|
68
|
+
}>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { readCredentials, saveCredentials } from '../commands/credentials.js';
|
|
2
|
+
export const SWITCH_TENANT_TOOL = {
|
|
3
|
+
name: 'switch_tenant',
|
|
4
|
+
description: 'Switch the active tenant for this MCP session. ' +
|
|
5
|
+
'If no tenantId is provided, lists all available tenants for the user. ' +
|
|
6
|
+
'If a tenantId is provided, switches to that tenant. ' +
|
|
7
|
+
'After switching, the MCP server process needs to be restarted (reload the editor window).',
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
tenantId: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description: 'The tenant ID to switch to. Omit to list available tenants.'
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
required: []
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const API_URL = process.env.BOTUYO_API_URL || 'https://api.botuyo.com';
|
|
20
|
+
export async function switchTenantHandler(client, args) {
|
|
21
|
+
const creds = await readCredentials();
|
|
22
|
+
if (!creds?.token) {
|
|
23
|
+
return { success: false, error: 'No credentials found. Run: npx @botuyo/mcp login' };
|
|
24
|
+
}
|
|
25
|
+
// Get user info with tenants
|
|
26
|
+
const meRes = await client.get('/api/auth/me');
|
|
27
|
+
const user = meRes.data?.user;
|
|
28
|
+
if (!user) {
|
|
29
|
+
return { success: false, error: 'Could not retrieve user info.' };
|
|
30
|
+
}
|
|
31
|
+
const tenantIds = user.tenantIds || [];
|
|
32
|
+
const roles = user.roles || [];
|
|
33
|
+
// If no tenantId provided, list available tenants
|
|
34
|
+
if (!args.tenantId) {
|
|
35
|
+
const tenants = tenantIds.map((tid) => ({
|
|
36
|
+
tenantId: tid,
|
|
37
|
+
role: roles.find((r) => r.tenantId === tid)?.role || 'member',
|
|
38
|
+
isActive: tid === creds.tenantId
|
|
39
|
+
}));
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
activeTenantId: creds.tenantId,
|
|
43
|
+
activeTenantName: creds.tenantName,
|
|
44
|
+
tenants,
|
|
45
|
+
hint: 'Call switch_tenant with a tenantId to switch. After switching, the editor window must be reloaded.'
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Switch to the specified tenant
|
|
49
|
+
const targetTenantId = args.tenantId;
|
|
50
|
+
if (!tenantIds.includes(targetTenantId)) {
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
error: `Tenant ${targetTenantId} not found in your tenant list.`,
|
|
54
|
+
availableTenants: tenantIds
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (targetTenantId === creds.tenantId) {
|
|
58
|
+
return { success: true, message: 'Already on that tenant. No change needed.' };
|
|
59
|
+
}
|
|
60
|
+
// Call switch-tenant API
|
|
61
|
+
const switchRes = await client.post('/api/auth/switch-tenant', { tenantId: targetTenantId });
|
|
62
|
+
if (!switchRes.success) {
|
|
63
|
+
return { success: false, error: switchRes.error || 'Failed to switch tenant.' };
|
|
64
|
+
}
|
|
65
|
+
const newToken = switchRes.data.token;
|
|
66
|
+
const newRole = switchRes.data.user?.role || roles.find((r) => r.tenantId === targetTenantId)?.role || 'member';
|
|
67
|
+
// Try to get tenant name
|
|
68
|
+
let tenantName = targetTenantId;
|
|
69
|
+
try {
|
|
70
|
+
const tenantRes = await fetch(`${API_URL}/api/v1/tenants/${targetTenantId}`, {
|
|
71
|
+
headers: { Authorization: `Bearer ${newToken}` }
|
|
72
|
+
});
|
|
73
|
+
const tenantData = (await tenantRes.json());
|
|
74
|
+
if (tenantData.success && tenantData.data?.name) {
|
|
75
|
+
tenantName = tenantData.data.name;
|
|
76
|
+
}
|
|
77
|
+
else if (tenantData.data?.tenant?.name) {
|
|
78
|
+
tenantName = tenantData.data.tenant.name;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// use tenantId as name
|
|
83
|
+
}
|
|
84
|
+
// Save new credentials
|
|
85
|
+
await saveCredentials({
|
|
86
|
+
...creds,
|
|
87
|
+
token: newToken,
|
|
88
|
+
tenantId: targetTenantId,
|
|
89
|
+
tenantName,
|
|
90
|
+
role: newRole,
|
|
91
|
+
savedAt: new Date().toISOString(),
|
|
92
|
+
expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString()
|
|
93
|
+
});
|
|
94
|
+
// Hot-swap the token in the running client so it takes effect immediately
|
|
95
|
+
client.setToken(newToken);
|
|
96
|
+
return {
|
|
97
|
+
success: true,
|
|
98
|
+
message: `Switched to tenant "${tenantName}" (${newRole}). The new tenant is now active.`,
|
|
99
|
+
tenantId: targetTenantId,
|
|
100
|
+
tenantName,
|
|
101
|
+
role: newRole
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=switch_tenant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch_tenant.js","sourceRoot":"","sources":["../../src/tools/switch_tenant.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,iDAAiD;QACjD,wEAAwE;QACxE,sDAAsD;QACtD,2FAA2F;IAC7F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6DAA6D;aAC3E;SACF;QACD,QAAQ,EAAE,EAAE;KACb;CACF,CAAA;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAA;AAEtE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAuB,EAAE,IAA6B;IAC9F,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;IACrC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAA;IACtF,CAAC;IAED,6BAA6B;IAC7B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAM,cAAc,CAAC,CAAA;IACnD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAA;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;IACnE,CAAC;IAED,MAAM,SAAS,GAAa,IAAI,CAAC,SAAS,IAAI,EAAE,CAAA;IAChD,MAAM,KAAK,GAA8C,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IAEzE,kDAAkD;IAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC;YAC9C,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,IAAI,IAAI,QAAQ;YAC7D,QAAQ,EAAE,GAAG,KAAK,KAAK,CAAC,QAAQ;SACjC,CAAC,CAAC,CAAA;QACH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,KAAK,CAAC,QAAQ;YAC9B,gBAAgB,EAAE,KAAK,CAAC,UAAU;YAClC,OAAO;YACP,IAAI,EAAE,oGAAoG;SAC3G,CAAA;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAkB,CAAA;IAE9C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,UAAU,cAAc,iCAAiC;YAChE,gBAAgB,EAAE,SAAS;SAC5B,CAAA;IACH,CAAC;IAED,IAAI,cAAc,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAA;IAChF,CAAC;IAED,yBAAyB;IACzB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAM,yBAAyB,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAA;IAEjG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,0BAA0B,EAAE,CAAA;IACjF,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAA;IACrC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAA;IAE/G,yBAAyB;IACzB,IAAI,UAAU,GAAG,cAAc,CAAA;IAC/B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,mBAAmB,cAAc,EAAE,EAAE;YAC3E,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,QAAQ,EAAE,EAAE;SACjD,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAQ,CAAA;QAClD,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChD,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAA;QACnC,CAAC;aAAM,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACzC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;IACzB,CAAC;IAED,uBAAuB;IACvB,MAAM,eAAe,CAAC;QACpB,GAAG,KAAK;QACR,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,cAAc;QACxB,UAAU;QACV,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;KACxE,CAAC,CAAA;IAEF,0EAA0E;IAC1E,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAEzB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,uBAAuB,UAAU,MAAM,OAAO,kCAAkC;QACzF,QAAQ,EAAE,cAAc;QACxB,UAAU;QACV,IAAI,EAAE,OAAO;KACd,CAAA;AACH,CAAC"}
|