@einlogic/mcp-fabric-api 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/LICENSE +661 -0
- package/README.md +241 -0
- package/build/auth/oauth-handler.d.ts +14 -0
- package/build/auth/oauth-handler.d.ts.map +1 -0
- package/build/auth/oauth-handler.js +32 -0
- package/build/auth/oauth-handler.js.map +1 -0
- package/build/auth/token-manager.d.ts +15 -0
- package/build/auth/token-manager.d.ts.map +1 -0
- package/build/auth/token-manager.js +61 -0
- package/build/auth/token-manager.js.map +1 -0
- package/build/client/fabric-client.d.ts +24 -0
- package/build/client/fabric-client.d.ts.map +1 -0
- package/build/client/fabric-client.js +91 -0
- package/build/client/fabric-client.js.map +1 -0
- package/build/client/powerbi-client.d.ts +15 -0
- package/build/client/powerbi-client.d.ts.map +1 -0
- package/build/client/powerbi-client.js +62 -0
- package/build/client/powerbi-client.js.map +1 -0
- package/build/core/errors.d.ts +14 -0
- package/build/core/errors.d.ts.map +1 -0
- package/build/core/errors.js +33 -0
- package/build/core/errors.js.map +1 -0
- package/build/core/job-scheduler.d.ts +7 -0
- package/build/core/job-scheduler.d.ts.map +1 -0
- package/build/core/job-scheduler.js +20 -0
- package/build/core/job-scheduler.js.map +1 -0
- package/build/core/lro.d.ts +9 -0
- package/build/core/lro.d.ts.map +1 -0
- package/build/core/lro.js +35 -0
- package/build/core/lro.js.map +1 -0
- package/build/core/pagination.d.ts +3 -0
- package/build/core/pagination.d.ts.map +1 -0
- package/build/core/pagination.js +27 -0
- package/build/core/pagination.js.map +1 -0
- package/build/core/types.d.ts +86 -0
- package/build/core/types.d.ts.map +1 -0
- package/build/core/types.js +2 -0
- package/build/core/types.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +85 -0
- package/build/index.js.map +1 -0
- package/build/server.d.ts +7 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +42 -0
- package/build/server.js.map +1 -0
- package/build/tools/auth.d.ts +4 -0
- package/build/tools/auth.d.ts.map +1 -0
- package/build/tools/auth.js +119 -0
- package/build/tools/auth.js.map +1 -0
- package/build/tools/dataflow.d.ts +4 -0
- package/build/tools/dataflow.d.ts.map +1 -0
- package/build/tools/dataflow.js +100 -0
- package/build/tools/dataflow.js.map +1 -0
- package/build/tools/eventhouse.d.ts +4 -0
- package/build/tools/eventhouse.d.ts.map +1 -0
- package/build/tools/eventhouse.js +80 -0
- package/build/tools/eventhouse.js.map +1 -0
- package/build/tools/eventstream.d.ts +4 -0
- package/build/tools/eventstream.d.ts.map +1 -0
- package/build/tools/eventstream.js +135 -0
- package/build/tools/eventstream.js.map +1 -0
- package/build/tools/graphql-api.d.ts +5 -0
- package/build/tools/graphql-api.d.ts.map +1 -0
- package/build/tools/graphql-api.js +124 -0
- package/build/tools/graphql-api.js.map +1 -0
- package/build/tools/lakehouse.d.ts +4 -0
- package/build/tools/lakehouse.d.ts.map +1 -0
- package/build/tools/lakehouse.js +138 -0
- package/build/tools/lakehouse.js.map +1 -0
- package/build/tools/notebook.d.ts +4 -0
- package/build/tools/notebook.d.ts.map +1 -0
- package/build/tools/notebook.js +186 -0
- package/build/tools/notebook.js.map +1 -0
- package/build/tools/pipeline.d.ts +4 -0
- package/build/tools/pipeline.d.ts.map +1 -0
- package/build/tools/pipeline.js +214 -0
- package/build/tools/pipeline.js.map +1 -0
- package/build/tools/reflex.d.ts +4 -0
- package/build/tools/reflex.d.ts.map +1 -0
- package/build/tools/reflex.js +101 -0
- package/build/tools/reflex.js.map +1 -0
- package/build/tools/report.d.ts +5 -0
- package/build/tools/report.d.ts.map +1 -0
- package/build/tools/report.js +191 -0
- package/build/tools/report.js.map +1 -0
- package/build/tools/semantic-model.d.ts +5 -0
- package/build/tools/semantic-model.d.ts.map +1 -0
- package/build/tools/semantic-model.js +225 -0
- package/build/tools/semantic-model.js.map +1 -0
- package/build/tools/sql-endpoint.d.ts +4 -0
- package/build/tools/sql-endpoint.d.ts.map +1 -0
- package/build/tools/sql-endpoint.js +44 -0
- package/build/tools/sql-endpoint.js.map +1 -0
- package/build/tools/workspace.d.ts +4 -0
- package/build/tools/workspace.d.ts.map +1 -0
- package/build/tools/workspace.js +84 -0
- package/build/tools/workspace.js.map +1 -0
- package/build/utils/base64.d.ts +3 -0
- package/build/utils/base64.d.ts.map +1 -0
- package/build/utils/base64.js +7 -0
- package/build/utils/base64.js.map +1 -0
- package/build/utils/tmdl.d.ts +13 -0
- package/build/utils/tmdl.d.ts.map +1 -0
- package/build/utils/tmdl.js +21 -0
- package/build/utils/tmdl.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FabricClient } from "../client/fabric-client.js";
|
|
2
|
+
import type { JobInstance } from "./types.js";
|
|
3
|
+
export declare function runOnDemandJob(client: FabricClient, workspaceId: string, itemId: string, jobType: string, executionData?: Record<string, unknown>): Promise<JobInstance>;
|
|
4
|
+
export declare function getJobInstance(client: FabricClient, workspaceId: string, itemId: string, jobInstanceId: string): Promise<JobInstance>;
|
|
5
|
+
export declare function cancelJobInstance(client: FabricClient, workspaceId: string, itemId: string, jobInstanceId: string): Promise<void>;
|
|
6
|
+
export declare function listJobInstances(client: FabricClient, workspaceId: string, itemId: string): Promise<JobInstance[]>;
|
|
7
|
+
//# sourceMappingURL=job-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-scheduler.d.ts","sourceRoot":"","sources":["../../src/core/job-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACtC,OAAO,CAAC,WAAW,CAAC,CAUtB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAKtB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,EAAE,CAAC,CAKxB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export async function runOnDemandJob(client, workspaceId, itemId, jobType, executionData) {
|
|
2
|
+
const body = {};
|
|
3
|
+
if (executionData) {
|
|
4
|
+
body.executionData = executionData;
|
|
5
|
+
}
|
|
6
|
+
const response = await client.post(`/workspaces/${workspaceId}/items/${itemId}/jobs/instances?jobType=${jobType}`, Object.keys(body).length > 0 ? body : undefined);
|
|
7
|
+
return response.data;
|
|
8
|
+
}
|
|
9
|
+
export async function getJobInstance(client, workspaceId, itemId, jobInstanceId) {
|
|
10
|
+
const response = await client.get(`/workspaces/${workspaceId}/items/${itemId}/jobs/instances/${jobInstanceId}`);
|
|
11
|
+
return response.data;
|
|
12
|
+
}
|
|
13
|
+
export async function cancelJobInstance(client, workspaceId, itemId, jobInstanceId) {
|
|
14
|
+
await client.post(`/workspaces/${workspaceId}/items/${itemId}/jobs/instances/${jobInstanceId}/cancel`);
|
|
15
|
+
}
|
|
16
|
+
export async function listJobInstances(client, workspaceId, itemId) {
|
|
17
|
+
const response = await client.get(`/workspaces/${workspaceId}/items/${itemId}/jobs/instances`);
|
|
18
|
+
return response.data.value ?? [];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=job-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-scheduler.js","sourceRoot":"","sources":["../../src/core/job-scheduler.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,OAAe,EACf,aAAuC;IAEvC,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,eAAe,WAAW,UAAU,MAAM,2BAA2B,OAAO,EAAE,EAC9E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,aAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,eAAe,WAAW,UAAU,MAAM,mBAAmB,aAAa,EAAE,CAC7E,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,aAAqB;IAErB,MAAM,MAAM,CAAC,IAAI,CACf,eAAe,WAAW,UAAU,MAAM,mBAAmB,aAAa,SAAS,CACpF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAoB,EACpB,WAAmB,EACnB,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,eAAe,WAAW,UAAU,MAAM,iBAAiB,CAC5D,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FabricClient } from "../client/fabric-client.js";
|
|
2
|
+
import type { OperationState } from "./types.js";
|
|
3
|
+
export interface LroOptions {
|
|
4
|
+
pollIntervalMs?: number;
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function pollOperation(client: FabricClient, operationId: string, options?: LroOptions): Promise<OperationState>;
|
|
8
|
+
export declare function getOperationResult<T>(client: FabricClient, operationId: string): Promise<T | undefined>;
|
|
9
|
+
//# sourceMappingURL=lro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lro.d.ts","sourceRoot":"","sources":["../../src/core/lro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAED,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAOxB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FabricApiError } from "./errors.js";
|
|
2
|
+
const DEFAULT_POLL_INTERVAL = 2000;
|
|
3
|
+
const DEFAULT_TIMEOUT = 300000; // 5 minutes
|
|
4
|
+
function sleep(ms) {
|
|
5
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
6
|
+
}
|
|
7
|
+
export async function pollOperation(client, operationId, options) {
|
|
8
|
+
const pollInterval = options?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL;
|
|
9
|
+
const timeout = options?.timeoutMs ?? DEFAULT_TIMEOUT;
|
|
10
|
+
const start = Date.now();
|
|
11
|
+
while (true) {
|
|
12
|
+
const response = await client.get(`/operations/${operationId}`);
|
|
13
|
+
const state = response.data;
|
|
14
|
+
if (state.status === "Succeeded" || state.status === "Failed" || state.status === "Cancelled") {
|
|
15
|
+
if (state.status === "Failed") {
|
|
16
|
+
throw new FabricApiError(state.error?.message ?? "Operation failed", 500, state.error?.errorCode);
|
|
17
|
+
}
|
|
18
|
+
return state;
|
|
19
|
+
}
|
|
20
|
+
if (Date.now() - start > timeout) {
|
|
21
|
+
throw new FabricApiError(`Operation ${operationId} timed out after ${timeout / 1000}s`, 408, "OperationTimeout");
|
|
22
|
+
}
|
|
23
|
+
await sleep(pollInterval);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function getOperationResult(client, operationId) {
|
|
27
|
+
try {
|
|
28
|
+
const response = await client.get(`/operations/${operationId}/result`);
|
|
29
|
+
return response.data;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=lro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lro.js","sourceRoot":"","sources":["../../src/core/lro.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQ7C,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,YAAY;AAE5C,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAoB,EACpB,WAAmB,EACnB,OAAoB;IAEpB,MAAM,YAAY,GAAG,OAAO,EAAE,cAAc,IAAI,qBAAqB,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,eAAe,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAiB,eAAe,WAAW,EAAE,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC9F,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,cAAc,CACtB,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,kBAAkB,EAC1C,GAAG,EACH,KAAK,CAAC,KAAK,EAAE,SAAS,CACvB,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,cAAc,CACtB,aAAa,WAAW,oBAAoB,OAAO,GAAG,IAAI,GAAG,EAC7D,GAAG,EACH,kBAAkB,CACnB,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAoB,EACpB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAI,eAAe,WAAW,SAAS,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAAgB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC,CA4Bd"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export async function paginateAll(client, path, resultKey = "value") {
|
|
2
|
+
const all = [];
|
|
3
|
+
let currentPath = path;
|
|
4
|
+
while (currentPath) {
|
|
5
|
+
const isFullUrl = currentPath.startsWith("http");
|
|
6
|
+
const response = isFullUrl
|
|
7
|
+
? await client.getFullUrl(currentPath)
|
|
8
|
+
: await client.get(currentPath);
|
|
9
|
+
const data = response.data;
|
|
10
|
+
const items = data[resultKey] ?? [];
|
|
11
|
+
all.push(...items);
|
|
12
|
+
const continuationUri = data.continuationUri;
|
|
13
|
+
const continuationToken = data.continuationToken;
|
|
14
|
+
if (continuationUri) {
|
|
15
|
+
currentPath = continuationUri;
|
|
16
|
+
}
|
|
17
|
+
else if (continuationToken) {
|
|
18
|
+
const separator = path.includes("?") ? "&" : "?";
|
|
19
|
+
currentPath = `${path}${separator}continuationToken=${continuationToken}`;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
currentPath = null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return all;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAoB,EACpB,IAAY,EACZ,YAAoB,OAAO;IAE3B,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,IAAI,WAAW,GAAkB,IAAI,CAAC;IAEtC,OAAO,WAAW,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,SAAS;YACxB,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,CAA0B,WAAW,CAAC;YAC/D,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAA0B,WAAW,CAAC,CAAC;QAE3D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,KAAK,GAAI,IAAI,CAAC,SAAS,CAAS,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAEnB,MAAM,eAAe,GAAG,IAAI,CAAC,eAA4C,CAAC;QAC1E,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAA8C,CAAC;QAE9E,IAAI,eAAe,EAAE,CAAC;YACpB,WAAW,GAAG,eAAe,CAAC;QAChC,CAAC;aAAM,IAAI,iBAAiB,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACjD,WAAW,GAAG,GAAG,IAAI,GAAG,SAAS,qBAAqB,iBAAiB,EAAE,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export interface FabricItem {
|
|
2
|
+
id: string;
|
|
3
|
+
displayName: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
type: string;
|
|
6
|
+
workspaceId: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ItemDefinitionPart {
|
|
9
|
+
path: string;
|
|
10
|
+
payload: string;
|
|
11
|
+
payloadType: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ItemDefinition {
|
|
14
|
+
definition: {
|
|
15
|
+
parts: ItemDefinitionPart[];
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface OperationState {
|
|
19
|
+
id: string;
|
|
20
|
+
status: "NotStarted" | "Running" | "Succeeded" | "Failed" | "Cancelled" | "Undefined";
|
|
21
|
+
createdTimeUtc?: string;
|
|
22
|
+
lastUpdatedTimeUtc?: string;
|
|
23
|
+
error?: {
|
|
24
|
+
errorCode: string;
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
27
|
+
percentComplete?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface JobInstance {
|
|
30
|
+
id: string;
|
|
31
|
+
itemId: string;
|
|
32
|
+
jobType: string;
|
|
33
|
+
invokeType: string;
|
|
34
|
+
status: "NotStarted" | "InProgress" | "Completed" | "Failed" | "Cancelled" | "Deduped";
|
|
35
|
+
startTimeUtc?: string;
|
|
36
|
+
endTimeUtc?: string;
|
|
37
|
+
failureReason?: {
|
|
38
|
+
message: string;
|
|
39
|
+
errorCode: string;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface PaginatedResponse<T> {
|
|
43
|
+
value: T[];
|
|
44
|
+
continuationUri?: string | null;
|
|
45
|
+
continuationToken?: string | null;
|
|
46
|
+
}
|
|
47
|
+
export interface Workspace {
|
|
48
|
+
id: string;
|
|
49
|
+
displayName: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
type: string;
|
|
52
|
+
capacityId?: string;
|
|
53
|
+
capacityAssignmentProgress?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface LakehouseProperties {
|
|
56
|
+
oneLakeTablesPath?: string;
|
|
57
|
+
oneLakeFilesPath?: string;
|
|
58
|
+
sqlEndpointProperties?: {
|
|
59
|
+
id: string;
|
|
60
|
+
connectionString: string;
|
|
61
|
+
provisioningStatus: string;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface Lakehouse extends FabricItem {
|
|
65
|
+
properties?: LakehouseProperties;
|
|
66
|
+
}
|
|
67
|
+
export interface LakehouseTable {
|
|
68
|
+
name: string;
|
|
69
|
+
type: string;
|
|
70
|
+
location: string;
|
|
71
|
+
format: string;
|
|
72
|
+
}
|
|
73
|
+
export interface ScheduleConfig {
|
|
74
|
+
id?: string;
|
|
75
|
+
enabled: boolean;
|
|
76
|
+
configuration: {
|
|
77
|
+
type: string;
|
|
78
|
+
startDateTime: string;
|
|
79
|
+
endDateTime?: string;
|
|
80
|
+
localTimeZoneId?: string;
|
|
81
|
+
times?: string[];
|
|
82
|
+
interval?: number;
|
|
83
|
+
weekDays?: string[];
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/build/index.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createServer } from "./server.js";
|
|
3
|
+
const transport = process.env.TRANSPORT ?? "stdio";
|
|
4
|
+
async function startStdio() {
|
|
5
|
+
const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const server = createServer();
|
|
7
|
+
const stdioTransport = new StdioServerTransport();
|
|
8
|
+
await server.connect(stdioTransport);
|
|
9
|
+
console.error("MCP Fabric API server running on stdio");
|
|
10
|
+
}
|
|
11
|
+
async function startHttp() {
|
|
12
|
+
const { default: express } = await import("express");
|
|
13
|
+
const { StreamableHTTPServerTransport } = await import("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
14
|
+
const { randomUUID } = await import("node:crypto");
|
|
15
|
+
const { getOAuthConfig, createOAuthMetadataHandler, createTokenValidationMiddleware, } = await import("./auth/oauth-handler.js");
|
|
16
|
+
const config = getOAuthConfig();
|
|
17
|
+
const port = parseInt(process.env.PORT ?? "3000", 10);
|
|
18
|
+
const app = express();
|
|
19
|
+
app.use(express.json());
|
|
20
|
+
// OAuth protected resource metadata
|
|
21
|
+
app.get("/.well-known/oauth-protected-resource", createOAuthMetadataHandler(config));
|
|
22
|
+
// Token validation middleware for MCP endpoint
|
|
23
|
+
app.use("/mcp", createTokenValidationMiddleware(config));
|
|
24
|
+
// Map to store transports by session ID
|
|
25
|
+
const transports = new Map();
|
|
26
|
+
// Handle MCP requests
|
|
27
|
+
app.post("/mcp", async (req, res) => {
|
|
28
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
29
|
+
if (sessionId && transports.has(sessionId)) {
|
|
30
|
+
const sessionTransport = transports.get(sessionId);
|
|
31
|
+
await sessionTransport.handleRequest(req, res, req.body);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const sessionTransport = new StreamableHTTPServerTransport({
|
|
35
|
+
sessionIdGenerator: () => randomUUID(),
|
|
36
|
+
onsessioninitialized: (newSessionId) => {
|
|
37
|
+
transports.set(newSessionId, sessionTransport);
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
sessionTransport.onclose = () => {
|
|
41
|
+
const sid = sessionTransport.sessionId;
|
|
42
|
+
if (sid)
|
|
43
|
+
transports.delete(sid);
|
|
44
|
+
};
|
|
45
|
+
const server = createServer();
|
|
46
|
+
await server.connect(sessionTransport);
|
|
47
|
+
await sessionTransport.handleRequest(req, res, req.body);
|
|
48
|
+
});
|
|
49
|
+
// Handle SSE for server-to-client notifications
|
|
50
|
+
app.get("/mcp", async (req, res) => {
|
|
51
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
52
|
+
if (!sessionId || !transports.has(sessionId)) {
|
|
53
|
+
res.status(400).json({ error: "Invalid or missing session ID" });
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const sessionTransport = transports.get(sessionId);
|
|
57
|
+
await sessionTransport.handleRequest(req, res);
|
|
58
|
+
});
|
|
59
|
+
// Handle session deletion
|
|
60
|
+
app.delete("/mcp", async (req, res) => {
|
|
61
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
62
|
+
if (!sessionId || !transports.has(sessionId)) {
|
|
63
|
+
res.status(400).json({ error: "Invalid or missing session ID" });
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const sessionTransport = transports.get(sessionId);
|
|
67
|
+
await sessionTransport.handleRequest(req, res);
|
|
68
|
+
});
|
|
69
|
+
app.listen(port, () => {
|
|
70
|
+
console.error(`MCP Fabric API server running on http://localhost:${port}/mcp`);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (transport === "http") {
|
|
74
|
+
startHttp().catch((error) => {
|
|
75
|
+
console.error("Failed to start HTTP server:", error);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
startStdio().catch((error) => {
|
|
81
|
+
console.error("Failed to start stdio server:", error);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { TokenManager } from "./auth/token-manager.js";
|
|
3
|
+
export interface CreateServerOptions {
|
|
4
|
+
tokenManager?: TokenManager;
|
|
5
|
+
}
|
|
6
|
+
export declare function createServer(options?: CreateServerOptions): McpServer;
|
|
7
|
+
//# 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;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAiBvD,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,CA0BrE"}
|
package/build/server.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { TokenManager } from "./auth/token-manager.js";
|
|
3
|
+
import { FabricClient } from "./client/fabric-client.js";
|
|
4
|
+
import { PowerBIClient } from "./client/powerbi-client.js";
|
|
5
|
+
import { registerWorkspaceTools } from "./tools/workspace.js";
|
|
6
|
+
import { registerLakehouseTools } from "./tools/lakehouse.js";
|
|
7
|
+
import { registerNotebookTools } from "./tools/notebook.js";
|
|
8
|
+
import { registerPipelineTools } from "./tools/pipeline.js";
|
|
9
|
+
import { registerSemanticModelTools } from "./tools/semantic-model.js";
|
|
10
|
+
import { registerReportTools } from "./tools/report.js";
|
|
11
|
+
import { registerDataflowTools } from "./tools/dataflow.js";
|
|
12
|
+
import { registerEventhouseTools } from "./tools/eventhouse.js";
|
|
13
|
+
import { registerEventstreamTools } from "./tools/eventstream.js";
|
|
14
|
+
import { registerReflexTools } from "./tools/reflex.js";
|
|
15
|
+
import { registerGraphQLApiTools } from "./tools/graphql-api.js";
|
|
16
|
+
import { registerSqlEndpointTools } from "./tools/sql-endpoint.js";
|
|
17
|
+
import { registerAuthTools } from "./tools/auth.js";
|
|
18
|
+
export function createServer(options) {
|
|
19
|
+
const server = new McpServer({
|
|
20
|
+
name: "mcp-fabric-api",
|
|
21
|
+
version: "1.0.0",
|
|
22
|
+
});
|
|
23
|
+
const tokenManager = options?.tokenManager ?? new TokenManager();
|
|
24
|
+
const fabricClient = new FabricClient(tokenManager);
|
|
25
|
+
const powerBIClient = new PowerBIClient(tokenManager);
|
|
26
|
+
// Register all domain tools
|
|
27
|
+
registerWorkspaceTools(server, fabricClient);
|
|
28
|
+
registerLakehouseTools(server, fabricClient);
|
|
29
|
+
registerNotebookTools(server, fabricClient);
|
|
30
|
+
registerPipelineTools(server, fabricClient);
|
|
31
|
+
registerSemanticModelTools(server, fabricClient, powerBIClient);
|
|
32
|
+
registerReportTools(server, fabricClient, powerBIClient);
|
|
33
|
+
registerDataflowTools(server, fabricClient);
|
|
34
|
+
registerEventhouseTools(server, fabricClient);
|
|
35
|
+
registerEventstreamTools(server, fabricClient);
|
|
36
|
+
registerReflexTools(server, fabricClient);
|
|
37
|
+
registerGraphQLApiTools(server, fabricClient, powerBIClient);
|
|
38
|
+
registerSqlEndpointTools(server, fabricClient);
|
|
39
|
+
registerAuthTools(server, tokenManager);
|
|
40
|
+
return server;
|
|
41
|
+
}
|
|
42
|
+
//# 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,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMpD,MAAM,UAAU,YAAY,CAAC,OAA6B;IACxD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,IAAI,YAAY,EAAE,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;IAEtD,4BAA4B;IAC5B,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7C,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7C,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,0BAA0B,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAChE,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IACzD,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,uBAAuB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9C,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAC7D,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAExC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAcxD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QA4I9E"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
import { formatToolError } from "../core/errors.js";
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
function decodeJwtPayload(token) {
|
|
7
|
+
const parts = token.split(".");
|
|
8
|
+
if (parts.length !== 3) {
|
|
9
|
+
throw new Error("Invalid JWT: expected 3 parts");
|
|
10
|
+
}
|
|
11
|
+
const payload = Buffer.from(parts[1], "base64url").toString("utf-8");
|
|
12
|
+
return JSON.parse(payload);
|
|
13
|
+
}
|
|
14
|
+
export function registerAuthTools(server, tokenManager) {
|
|
15
|
+
server.tool("auth_get_current_account", "Show the current Azure identity, tenant, and token expiry by decoding the Fabric JWT", {}, async () => {
|
|
16
|
+
try {
|
|
17
|
+
const token = await tokenManager.getFabricToken();
|
|
18
|
+
const claims = decodeJwtPayload(token);
|
|
19
|
+
const info = {
|
|
20
|
+
tenantId: claims.tid ?? tokenManager.getCurrentTenantId() ?? "unknown",
|
|
21
|
+
objectId: claims.oid ?? "unknown",
|
|
22
|
+
appId: claims.appid ?? claims.azp ?? "unknown",
|
|
23
|
+
upn: claims.upn ?? claims.unique_name ?? "unknown",
|
|
24
|
+
name: claims.name ?? "unknown",
|
|
25
|
+
expiresAt: claims.exp
|
|
26
|
+
? new Date(claims.exp * 1000).toISOString()
|
|
27
|
+
: "unknown",
|
|
28
|
+
issuedAt: claims.iat
|
|
29
|
+
? new Date(claims.iat * 1000).toISOString()
|
|
30
|
+
: "unknown",
|
|
31
|
+
scopes: claims.scp ?? claims.roles ?? "unknown",
|
|
32
|
+
};
|
|
33
|
+
return { content: [{ type: "text", text: JSON.stringify(info, null, 2) }] };
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return formatToolError(error);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
server.tool("auth_list_available_accounts", "List Azure subscriptions and tenants the local user has logged into via 'az login'. Reads local CLI state only — does not query Entra ID or list other users.", {}, async () => {
|
|
40
|
+
try {
|
|
41
|
+
const { stdout } = await execFileAsync("az", ["account", "list", "--output", "json"], {
|
|
42
|
+
timeout: 15_000,
|
|
43
|
+
});
|
|
44
|
+
const accounts = JSON.parse(stdout);
|
|
45
|
+
// Group by tenant
|
|
46
|
+
const byTenant = new Map();
|
|
47
|
+
for (const acct of accounts) {
|
|
48
|
+
const tid = String(acct.tenantId ?? "unknown");
|
|
49
|
+
if (!byTenant.has(tid))
|
|
50
|
+
byTenant.set(tid, []);
|
|
51
|
+
byTenant.get(tid).push({
|
|
52
|
+
name: acct.name,
|
|
53
|
+
id: acct.id,
|
|
54
|
+
isDefault: acct.isDefault,
|
|
55
|
+
state: acct.state,
|
|
56
|
+
user: acct.user,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const result = Object.fromEntries(byTenant);
|
|
60
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
64
|
+
if (message.includes("ENOENT") || message.includes("not found") || message.includes("not recognized")) {
|
|
65
|
+
return formatToolError(new Error("Azure CLI ('az') is not installed or not on PATH. Install it from https://aka.ms/installazurecli"));
|
|
66
|
+
}
|
|
67
|
+
if (message.includes("az login") || message.includes("Please run")) {
|
|
68
|
+
return formatToolError(new Error("Not logged in to Azure CLI. Run 'az login' first."));
|
|
69
|
+
}
|
|
70
|
+
return formatToolError(error);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
server.tool("auth_switch_tenant", "Switch to a different Azure tenant. Acquires a new token to verify access; rolls back on failure.", {
|
|
74
|
+
tenantId: z.string().describe("The Azure AD tenant ID (GUID) to switch to"),
|
|
75
|
+
}, async ({ tenantId }) => {
|
|
76
|
+
const previousTenantId = tokenManager.getCurrentTenantId();
|
|
77
|
+
try {
|
|
78
|
+
tokenManager.switchTenant(tenantId);
|
|
79
|
+
// Verify the new tenant works by acquiring a token
|
|
80
|
+
const token = await tokenManager.getFabricToken();
|
|
81
|
+
const claims = decodeJwtPayload(token);
|
|
82
|
+
const info = {
|
|
83
|
+
switched: true,
|
|
84
|
+
previousTenantId: previousTenantId ?? "default",
|
|
85
|
+
newTenantId: tenantId,
|
|
86
|
+
identity: claims.upn ?? claims.unique_name ?? claims.oid ?? "unknown",
|
|
87
|
+
expiresAt: claims.exp
|
|
88
|
+
? new Date(claims.exp * 1000).toISOString()
|
|
89
|
+
: "unknown",
|
|
90
|
+
};
|
|
91
|
+
return { content: [{ type: "text", text: JSON.stringify(info, null, 2) }] };
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// Rollback to previous tenant
|
|
95
|
+
tokenManager.switchTenant(previousTenantId);
|
|
96
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
97
|
+
return formatToolError(new Error(`Failed to switch to tenant ${tenantId}. Rolled back to ${previousTenantId ?? "default"}.\nDetails: ${message}`));
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
server.tool("auth_clear_token_cache", "Clear cached authentication tokens to force re-acquisition on next API call", {}, async () => {
|
|
101
|
+
try {
|
|
102
|
+
tokenManager.clearCache();
|
|
103
|
+
return {
|
|
104
|
+
content: [{
|
|
105
|
+
type: "text",
|
|
106
|
+
text: JSON.stringify({
|
|
107
|
+
cleared: true,
|
|
108
|
+
currentTenantId: tokenManager.getCurrentTenantId() ?? "default",
|
|
109
|
+
message: "Token cache cleared. Next API call will acquire fresh tokens.",
|
|
110
|
+
}, null, 2),
|
|
111
|
+
}],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
return formatToolError(error);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/tools/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataflow.d.ts","sourceRoot":"","sources":["../../src/tools/dataflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK1D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,QA6HlF"}
|