@confluentinc/mcp-confluent 1.1.0 → 1.2.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/README.md +507 -342
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/confluent/client-manager.d.ts +9 -0
- package/dist/confluent/client-manager.d.ts.map +1 -1
- package/dist/confluent/client-manager.js +35 -4
- package/dist/confluent/client-manager.js.map +1 -1
- package/dist/confluent/middleware.d.ts +3 -2
- package/dist/confluent/middleware.d.ts.map +1 -1
- package/dist/confluent/middleware.js +9 -2
- package/dist/confluent/middleware.js.map +1 -1
- package/dist/confluent/node-deps.d.ts +60 -0
- package/dist/confluent/node-deps.d.ts.map +1 -0
- package/dist/confluent/node-deps.js +12 -0
- package/dist/confluent/node-deps.js.map +1 -0
- package/dist/confluent/telemetry.d.ts +18 -0
- package/dist/confluent/telemetry.d.ts.map +1 -0
- package/dist/confluent/telemetry.js +104 -0
- package/dist/confluent/telemetry.js.map +1 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js +174 -0
- package/dist/confluent/tools/handlers/billing/list-billing-costs-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts +77 -0
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js +136 -0
- package/dist/confluent/tools/handlers/flink/catalog/catalog-resolver.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js +111 -0
- package/dist/confluent/tools/handlers/flink/catalog/describe-table-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js +110 -0
- package/dist/confluent/tools/handlers/flink/catalog/get-table-info-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js +74 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-catalogs-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js +81 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-databases-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js +90 -0
- package/dist/confluent/tools/handlers/flink/catalog/list-tables-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js +131 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/check-health-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js +248 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/detect-issues-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts +88 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js +443 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/metrics-helper.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js +398 -0
- package/dist/confluent/tools/handlers/flink/diagnostics/query-profiler-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts +23 -0
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.js +133 -0
- package/dist/confluent/tools/handlers/flink/flink-sql-helper.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js +72 -0
- package/dist/confluent/tools/handlers/flink/get-flink-exceptions-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js +20 -3
- package/dist/confluent/tools/handlers/flink/list-flink-statements-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/consume-kafka-messages-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/create-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/delete-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/list-topics-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js +1 -1
- package/dist/confluent/tools/handlers/kafka/produce-kafka-message-handler.js.map +1 -1
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js +193 -0
- package/dist/confluent/tools/handlers/metrics/list-metrics-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts +11 -0
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js +224 -0
- package/dist/confluent/tools/handlers/metrics/query-metrics-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts +10 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.d.ts.map +1 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js +71 -0
- package/dist/confluent/tools/handlers/schema/delete-schema-handler.js.map +1 -0
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +1 -5
- package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
- package/dist/confluent/tools/tool-factory.d.ts.map +1 -1
- package/dist/confluent/tools/tool-factory.js +26 -0
- package/dist/confluent/tools/tool-factory.js.map +1 -1
- package/dist/confluent/tools/tool-name.d.ts +14 -1
- package/dist/confluent/tools/tool-name.d.ts.map +1 -1
- package/dist/confluent/tools/tool-name.js +13 -0
- package/dist/confluent/tools/tool-name.js.map +1 -1
- package/dist/env-schema.d.ts +7 -0
- package/dist/env-schema.d.ts.map +1 -1
- package/dist/env-schema.js +37 -2
- package/dist/env-schema.js.map +1 -1
- package/dist/env.d.ts +7 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/index.js +67 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp/transports/auth.d.ts +55 -0
- package/dist/mcp/transports/auth.d.ts.map +1 -0
- package/dist/mcp/transports/auth.js +127 -0
- package/dist/mcp/transports/auth.js.map +1 -0
- package/dist/mcp/transports/index.d.ts +1 -0
- package/dist/mcp/transports/index.d.ts.map +1 -1
- package/dist/mcp/transports/index.js +1 -0
- package/dist/mcp/transports/index.js.map +1 -1
- package/dist/mcp/transports/manager.d.ts +13 -1
- package/dist/mcp/transports/manager.d.ts.map +1 -1
- package/dist/mcp/transports/manager.js +20 -2
- package/dist/mcp/transports/manager.js.map +1 -1
- package/dist/mcp/transports/server.d.ts +10 -1
- package/dist/mcp/transports/server.d.ts.map +1 -1
- package/dist/mcp/transports/server.js +12 -2
- package/dist/mcp/transports/server.js.map +1 -1
- package/package.json +14 -6
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { BaseToolHandler, } from "../../../../confluent/tools/base-tools.js";
|
|
2
|
+
import { ToolName } from "../../../../confluent/tools/tool-name.js";
|
|
3
|
+
import env from "../../../../env.js";
|
|
4
|
+
import { logger } from "../../../../logger.js";
|
|
5
|
+
import { wrapAsPathBasedClient } from "openapi-fetch";
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
const listBillingCostsArguments = z.object({
|
|
8
|
+
baseUrl: z
|
|
9
|
+
.string()
|
|
10
|
+
.describe("The base URL of the Confluent Cloud REST API.")
|
|
11
|
+
.url()
|
|
12
|
+
.default(() => env.CONFLUENT_CLOUD_REST_ENDPOINT ?? "")
|
|
13
|
+
.optional(),
|
|
14
|
+
startDate: z
|
|
15
|
+
.string()
|
|
16
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
|
|
17
|
+
.describe("Start date for billing costs in YYYY-MM-DD format"),
|
|
18
|
+
endDate: z
|
|
19
|
+
.string()
|
|
20
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
|
|
21
|
+
.describe("End date for billing costs in YYYY-MM-DD format"),
|
|
22
|
+
pageSize: z
|
|
23
|
+
.number()
|
|
24
|
+
.int()
|
|
25
|
+
.positive()
|
|
26
|
+
.max(1000)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Number of results per page (max 1000)"),
|
|
29
|
+
pageToken: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Token for the next page of results"),
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Schema for validating billing cost line items
|
|
36
|
+
*/
|
|
37
|
+
const costLineItemSchema = z.object({
|
|
38
|
+
start_date: z.string(),
|
|
39
|
+
end_date: z.string(),
|
|
40
|
+
product: z.string(),
|
|
41
|
+
type: z.string().optional(),
|
|
42
|
+
price: z.number().optional(),
|
|
43
|
+
unit: z.string().optional(),
|
|
44
|
+
quantity: z.number().optional(),
|
|
45
|
+
original_amount: z.number(),
|
|
46
|
+
discount_amount: z.number().optional(),
|
|
47
|
+
amount: z.number(),
|
|
48
|
+
network_access_type: z.string().optional(),
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Schema for validating Confluent Cloud billing costs responses
|
|
52
|
+
*/
|
|
53
|
+
const billingCostsSchema = z.object({
|
|
54
|
+
api_version: z.literal("v1"),
|
|
55
|
+
kind: z.literal("CostList"),
|
|
56
|
+
metadata: z
|
|
57
|
+
.object({
|
|
58
|
+
first: z.string().optional(),
|
|
59
|
+
last: z.string().optional(),
|
|
60
|
+
prev: z.string().optional(),
|
|
61
|
+
next: z.string().optional(),
|
|
62
|
+
total_size: z.number().optional(),
|
|
63
|
+
})
|
|
64
|
+
.optional(),
|
|
65
|
+
data: z.array(costLineItemSchema),
|
|
66
|
+
});
|
|
67
|
+
export class ListBillingCostsHandler extends BaseToolHandler {
|
|
68
|
+
async handle(clientManager, toolArguments) {
|
|
69
|
+
const { baseUrl, startDate, endDate, pageSize, pageToken } = listBillingCostsArguments.parse(toolArguments);
|
|
70
|
+
try {
|
|
71
|
+
if (baseUrl !== undefined && baseUrl !== "") {
|
|
72
|
+
clientManager.setConfluentCloudRestEndpoint(baseUrl);
|
|
73
|
+
}
|
|
74
|
+
const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudRestClient());
|
|
75
|
+
const { data: response, error } = await pathBasedClient["/billing/v1/costs"].GET({
|
|
76
|
+
params: {
|
|
77
|
+
query: {
|
|
78
|
+
start_date: startDate,
|
|
79
|
+
end_date: endDate,
|
|
80
|
+
page_size: pageSize,
|
|
81
|
+
page_token: pageToken,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (error) {
|
|
86
|
+
logger.error({ error }, "API Error");
|
|
87
|
+
return this.createResponse(`Failed to fetch billing costs: ${JSON.stringify(error)}`, true, { error });
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const validatedResponse = billingCostsSchema.parse(response);
|
|
91
|
+
// Calculate totals and group by product
|
|
92
|
+
const productCosts = new Map();
|
|
93
|
+
let totalAmount = 0;
|
|
94
|
+
let totalOriginalAmount = 0;
|
|
95
|
+
let totalDiscountAmount = 0;
|
|
96
|
+
validatedResponse.data.forEach((item) => {
|
|
97
|
+
totalAmount += item.amount;
|
|
98
|
+
totalOriginalAmount += item.original_amount;
|
|
99
|
+
totalDiscountAmount += item.discount_amount || 0;
|
|
100
|
+
const currentProductCost = productCosts.get(item.product) || 0;
|
|
101
|
+
productCosts.set(item.product, currentProductCost + item.amount);
|
|
102
|
+
});
|
|
103
|
+
// Format cost details for display
|
|
104
|
+
const costSummary = `
|
|
105
|
+
Cost Summary (${startDate} to ${endDate}):
|
|
106
|
+
Total Amount: $${totalAmount.toFixed(2)}
|
|
107
|
+
Original Amount: $${totalOriginalAmount.toFixed(2)}
|
|
108
|
+
Total Discount: $${totalDiscountAmount.toFixed(2)}
|
|
109
|
+
Total Line Items: ${validatedResponse.data.length}
|
|
110
|
+
`;
|
|
111
|
+
const productBreakdown = productCosts.size > 0
|
|
112
|
+
? `
|
|
113
|
+
Product Breakdown:
|
|
114
|
+
${Array.from(productCosts.entries())
|
|
115
|
+
.sort((a, b) => b[1] - a[1])
|
|
116
|
+
.map(([product, amount]) => ` ${product}: $${amount.toFixed(2)}`)
|
|
117
|
+
.join("\n")}
|
|
118
|
+
`
|
|
119
|
+
: "";
|
|
120
|
+
const metadata = validatedResponse.metadata;
|
|
121
|
+
const paginationInfo = metadata
|
|
122
|
+
? `
|
|
123
|
+
Pagination:${metadata.total_size ? `\n Total Items: ${metadata.total_size}` : ""}${metadata.first ? `\n First Page: ${metadata.first}` : ""}${metadata.last ? `\n Last Page: ${metadata.last}` : ""}${metadata.prev ? `\n Previous Page: ${metadata.prev}` : ""}${metadata.next ? `\n Next Page: ${metadata.next}` : ""}
|
|
124
|
+
`
|
|
125
|
+
: "";
|
|
126
|
+
return this.createResponse(`Successfully retrieved billing costs:\n${costSummary}${productBreakdown}${paginationInfo}`, false, {
|
|
127
|
+
costs: validatedResponse.data,
|
|
128
|
+
summary: {
|
|
129
|
+
total_amount: totalAmount,
|
|
130
|
+
original_amount: totalOriginalAmount,
|
|
131
|
+
discount_amount: totalDiscountAmount,
|
|
132
|
+
line_item_count: validatedResponse.data.length,
|
|
133
|
+
date_range: {
|
|
134
|
+
start: startDate,
|
|
135
|
+
end: endDate,
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
product_breakdown: Object.fromEntries(productCosts),
|
|
139
|
+
total: metadata?.total_size,
|
|
140
|
+
pagination: metadata
|
|
141
|
+
? {
|
|
142
|
+
first: metadata.first,
|
|
143
|
+
last: metadata.last,
|
|
144
|
+
prev: metadata.prev,
|
|
145
|
+
next: metadata.next,
|
|
146
|
+
}
|
|
147
|
+
: undefined,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (validationError) {
|
|
151
|
+
logger.error({ error: validationError }, "Billing costs validation error");
|
|
152
|
+
return this.createResponse(`Invalid billing costs data: ${validationError instanceof Error ? validationError.message : String(validationError)}`, true, { error: validationError });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
logger.error({ error }, "Error in ListBillingCostsHandler");
|
|
157
|
+
return this.createResponse(`Failed to fetch billing costs: ${error instanceof Error ? error.message : String(error)}`, true, { error: error instanceof Error ? error.message : String(error) });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
getToolConfig() {
|
|
161
|
+
return {
|
|
162
|
+
name: ToolName.LIST_BILLING_COSTS,
|
|
163
|
+
description: "Retrieve billing cost data for a Confluent Cloud organization within a specified date range with pagination support",
|
|
164
|
+
inputSchema: listBillingCostsArguments.shape,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
getRequiredEnvVars() {
|
|
168
|
+
return ["CONFLUENT_CLOUD_API_KEY", "CONFLUENT_CLOUD_API_SECRET"];
|
|
169
|
+
}
|
|
170
|
+
isConfluentCloudOnly() {
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=list-billing-costs-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-billing-costs-handler.js","sourceRoot":"","sources":["../../../../../src/confluent/tools/handlers/billing/list-billing-costs-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { ClientManager } from "../../../../../confluent/client-manager.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the Flink catalog name from various inputs.
|
|
4
|
+
*
|
|
5
|
+
* In Confluent Cloud Flink, the catalog name is always the environment ID (env-xxxxx).
|
|
6
|
+
* This function handles cases where a friendly name or invalid value is provided,
|
|
7
|
+
* falling back to the environment ID from config.
|
|
8
|
+
*
|
|
9
|
+
* Resolution order:
|
|
10
|
+
* 1. If catalogName is provided and looks like an env ID (starts with "env-"), use it
|
|
11
|
+
* 2. Otherwise, use FLINK_ENV_ID from environment
|
|
12
|
+
*
|
|
13
|
+
* @param catalogName - Optional catalog name from user/LLM input
|
|
14
|
+
* @returns The resolved catalog name (environment ID), or undefined if not resolvable
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveCatalogName(catalogName?: string): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Resolves the Flink database name from various inputs.
|
|
19
|
+
*
|
|
20
|
+
* In Confluent Cloud Flink, the database name can be either:
|
|
21
|
+
* - A Kafka cluster ID (lkc-xxxxx)
|
|
22
|
+
* - A friendly database name (e.g., "standard_cluster")
|
|
23
|
+
*
|
|
24
|
+
* INFORMATION_SCHEMA.TABLES uses friendly names in TABLE_SCHEMA, not cluster IDs.
|
|
25
|
+
*
|
|
26
|
+
* Resolution order:
|
|
27
|
+
* 1. If databaseName is provided and non-empty, use it (could be cluster ID or friendly name)
|
|
28
|
+
* 2. Otherwise, use KAFKA_CLUSTER_ID from environment
|
|
29
|
+
*
|
|
30
|
+
* @param databaseName - Optional database name from user/LLM input
|
|
31
|
+
* @returns The resolved database name, or undefined if not resolvable
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveDatabaseName(databaseName?: string): string | undefined;
|
|
34
|
+
export interface CatalogMapping {
|
|
35
|
+
catalogId: string;
|
|
36
|
+
catalogName: string;
|
|
37
|
+
}
|
|
38
|
+
export interface SchemaMapping {
|
|
39
|
+
schemaId: string;
|
|
40
|
+
schemaName: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Looks up catalog mappings from INFORMATION_SCHEMA.CATALOGS.
|
|
44
|
+
* Returns a 1:1 mapping between environment IDs (CATALOG_ID) and friendly names (CATALOG_NAME).
|
|
45
|
+
*/
|
|
46
|
+
export declare function getCatalogMapping(clientManager: ClientManager, catalogName: string, options: {
|
|
47
|
+
organizationId: string;
|
|
48
|
+
environmentId: string;
|
|
49
|
+
computePoolId: string;
|
|
50
|
+
}): Promise<CatalogMapping[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Resolves a catalog identifier (could be env ID or friendly name) to the friendly CATALOG_NAME.
|
|
53
|
+
*
|
|
54
|
+
* @param catalogInput - The catalog identifier (env-xxxxx or friendly name)
|
|
55
|
+
* @param mappings - The catalog mappings from getCatalogMapping()
|
|
56
|
+
* @returns The friendly CATALOG_NAME to use in queries, or the original input if no mapping found
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveToCatalogName(catalogInput: string, mappings: CatalogMapping[]): string;
|
|
59
|
+
/**
|
|
60
|
+
* Looks up schema mappings from INFORMATION_SCHEMA.SCHEMATA.
|
|
61
|
+
* Returns a 1:1 mapping between cluster IDs (SCHEMA_ID) and friendly names (SCHEMA_NAME).
|
|
62
|
+
*/
|
|
63
|
+
export declare function getSchemaMapping(clientManager: ClientManager, catalogName: string, options: {
|
|
64
|
+
organizationId: string;
|
|
65
|
+
environmentId: string;
|
|
66
|
+
computePoolId: string;
|
|
67
|
+
}): Promise<SchemaMapping[]>;
|
|
68
|
+
/**
|
|
69
|
+
* Resolves a database identifier (could be cluster ID or friendly name) to the friendly SCHEMA_NAME.
|
|
70
|
+
* INFORMATION_SCHEMA queries use SCHEMA_NAME (friendly name) in TABLE_SCHEMA, not SCHEMA_ID.
|
|
71
|
+
*
|
|
72
|
+
* @param databaseInput - The database identifier (lkc-xxxxx or friendly name)
|
|
73
|
+
* @param mappings - The schema mappings from getSchemaMapping()
|
|
74
|
+
* @returns The friendly SCHEMA_NAME to use in queries, or the original input if no mapping found
|
|
75
|
+
*/
|
|
76
|
+
export declare function resolveToSchemaName(databaseInput: string, mappings: SchemaMapping[]): string;
|
|
77
|
+
//# sourceMappingURL=catalog-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-resolver.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/catalog-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAIjE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ3E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ7E;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IACP,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,cAAc,EAAE,CAAC,CAuB3B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,cAAc,EAAE,GACzB,MAAM,CAWR;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IACP,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,aAAa,EAAE,CAAC,CAuB1B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,aAAa,EAAE,GACxB,MAAM,CAWR"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
|
|
2
|
+
import env from "../../../../../env.js";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves the Flink catalog name from various inputs.
|
|
5
|
+
*
|
|
6
|
+
* In Confluent Cloud Flink, the catalog name is always the environment ID (env-xxxxx).
|
|
7
|
+
* This function handles cases where a friendly name or invalid value is provided,
|
|
8
|
+
* falling back to the environment ID from config.
|
|
9
|
+
*
|
|
10
|
+
* Resolution order:
|
|
11
|
+
* 1. If catalogName is provided and looks like an env ID (starts with "env-"), use it
|
|
12
|
+
* 2. Otherwise, use FLINK_ENV_ID from environment
|
|
13
|
+
*
|
|
14
|
+
* @param catalogName - Optional catalog name from user/LLM input
|
|
15
|
+
* @returns The resolved catalog name (environment ID), or undefined if not resolvable
|
|
16
|
+
*/
|
|
17
|
+
export function resolveCatalogName(catalogName) {
|
|
18
|
+
// If provided value looks like an environment ID, use it
|
|
19
|
+
if (catalogName && catalogName.startsWith("env-")) {
|
|
20
|
+
return catalogName;
|
|
21
|
+
}
|
|
22
|
+
// Fall back to FLINK_ENV_ID (the actual environment ID)
|
|
23
|
+
return env.FLINK_ENV_ID;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolves the Flink database name from various inputs.
|
|
27
|
+
*
|
|
28
|
+
* In Confluent Cloud Flink, the database name can be either:
|
|
29
|
+
* - A Kafka cluster ID (lkc-xxxxx)
|
|
30
|
+
* - A friendly database name (e.g., "standard_cluster")
|
|
31
|
+
*
|
|
32
|
+
* INFORMATION_SCHEMA.TABLES uses friendly names in TABLE_SCHEMA, not cluster IDs.
|
|
33
|
+
*
|
|
34
|
+
* Resolution order:
|
|
35
|
+
* 1. If databaseName is provided and non-empty, use it (could be cluster ID or friendly name)
|
|
36
|
+
* 2. Otherwise, use KAFKA_CLUSTER_ID from environment
|
|
37
|
+
*
|
|
38
|
+
* @param databaseName - Optional database name from user/LLM input
|
|
39
|
+
* @returns The resolved database name, or undefined if not resolvable
|
|
40
|
+
*/
|
|
41
|
+
export function resolveDatabaseName(databaseName) {
|
|
42
|
+
// If any non-empty value is provided, use it (could be lkc-* or friendly name)
|
|
43
|
+
if (databaseName && databaseName.trim()) {
|
|
44
|
+
return databaseName.trim();
|
|
45
|
+
}
|
|
46
|
+
// Fall back to KAFKA_CLUSTER_ID
|
|
47
|
+
return env.KAFKA_CLUSTER_ID;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Looks up catalog mappings from INFORMATION_SCHEMA.CATALOGS.
|
|
51
|
+
* Returns a 1:1 mapping between environment IDs (CATALOG_ID) and friendly names (CATALOG_NAME).
|
|
52
|
+
*/
|
|
53
|
+
export async function getCatalogMapping(clientManager, catalogName, options) {
|
|
54
|
+
const sql = `SELECT \`CATALOG_ID\`, \`CATALOG_NAME\` FROM \`${catalogName}\`.\`INFORMATION_SCHEMA\`.\`CATALOGS\``;
|
|
55
|
+
const result = await executeFlinkSql(clientManager, sql, {
|
|
56
|
+
organizationId: options.organizationId,
|
|
57
|
+
environmentId: options.environmentId,
|
|
58
|
+
computePoolId: options.computePoolId,
|
|
59
|
+
});
|
|
60
|
+
if (!result.success || !result.data) {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
const mappings = [];
|
|
64
|
+
for (const row of result.data) {
|
|
65
|
+
const r = row;
|
|
66
|
+
const catalogId = r?.CATALOG_ID;
|
|
67
|
+
const catalogNameValue = r?.CATALOG_NAME;
|
|
68
|
+
if (typeof catalogId === "string" && typeof catalogNameValue === "string") {
|
|
69
|
+
mappings.push({ catalogId, catalogName: catalogNameValue });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return mappings;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Resolves a catalog identifier (could be env ID or friendly name) to the friendly CATALOG_NAME.
|
|
76
|
+
*
|
|
77
|
+
* @param catalogInput - The catalog identifier (env-xxxxx or friendly name)
|
|
78
|
+
* @param mappings - The catalog mappings from getCatalogMapping()
|
|
79
|
+
* @returns The friendly CATALOG_NAME to use in queries, or the original input if no mapping found
|
|
80
|
+
*/
|
|
81
|
+
export function resolveToCatalogName(catalogInput, mappings) {
|
|
82
|
+
// If it looks like an environment ID, look up the friendly name
|
|
83
|
+
if (catalogInput.startsWith("env-")) {
|
|
84
|
+
const mapping = mappings.find((m) => m.catalogId === catalogInput);
|
|
85
|
+
if (mapping) {
|
|
86
|
+
return mapping.catalogName;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Otherwise, assume it's already a friendly name or return as-is
|
|
90
|
+
return catalogInput;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Looks up schema mappings from INFORMATION_SCHEMA.SCHEMATA.
|
|
94
|
+
* Returns a 1:1 mapping between cluster IDs (SCHEMA_ID) and friendly names (SCHEMA_NAME).
|
|
95
|
+
*/
|
|
96
|
+
export async function getSchemaMapping(clientManager, catalogName, options) {
|
|
97
|
+
const sql = `SELECT \`SCHEMA_ID\`, \`SCHEMA_NAME\` FROM \`${catalogName}\`.\`INFORMATION_SCHEMA\`.\`SCHEMATA\` WHERE \`SCHEMA_NAME\` <> 'INFORMATION_SCHEMA'`;
|
|
98
|
+
const result = await executeFlinkSql(clientManager, sql, {
|
|
99
|
+
organizationId: options.organizationId,
|
|
100
|
+
environmentId: options.environmentId,
|
|
101
|
+
computePoolId: options.computePoolId,
|
|
102
|
+
});
|
|
103
|
+
if (!result.success || !result.data) {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
const mappings = [];
|
|
107
|
+
for (const row of result.data) {
|
|
108
|
+
const r = row;
|
|
109
|
+
const schemaId = r?.SCHEMA_ID;
|
|
110
|
+
const schemaName = r?.SCHEMA_NAME;
|
|
111
|
+
if (typeof schemaId === "string" && typeof schemaName === "string") {
|
|
112
|
+
mappings.push({ schemaId, schemaName });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return mappings;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Resolves a database identifier (could be cluster ID or friendly name) to the friendly SCHEMA_NAME.
|
|
119
|
+
* INFORMATION_SCHEMA queries use SCHEMA_NAME (friendly name) in TABLE_SCHEMA, not SCHEMA_ID.
|
|
120
|
+
*
|
|
121
|
+
* @param databaseInput - The database identifier (lkc-xxxxx or friendly name)
|
|
122
|
+
* @param mappings - The schema mappings from getSchemaMapping()
|
|
123
|
+
* @returns The friendly SCHEMA_NAME to use in queries, or the original input if no mapping found
|
|
124
|
+
*/
|
|
125
|
+
export function resolveToSchemaName(databaseInput, mappings) {
|
|
126
|
+
// If it looks like a cluster ID, look up the friendly name
|
|
127
|
+
if (databaseInput.startsWith("lkc-")) {
|
|
128
|
+
const mapping = mappings.find((m) => m.schemaId === databaseInput);
|
|
129
|
+
if (mapping) {
|
|
130
|
+
return mapping.schemaName;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Otherwise, assume it's already a friendly name or return as-is
|
|
134
|
+
return databaseInput;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=catalog-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog-resolver.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/catalog-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ClientManager } from "../../../../../confluent/client-manager.js";
|
|
2
|
+
import { CallToolResult } from "../../../../../confluent/schema.js";
|
|
3
|
+
import { BaseToolHandler, ToolConfig } from "../../../../../confluent/tools/base-tools.js";
|
|
4
|
+
import { EnvVar } from "../../../../../env-schema.js";
|
|
5
|
+
export declare class DescribeTableHandler extends BaseToolHandler {
|
|
6
|
+
handle(clientManager: ClientManager, toolArguments: Record<string, unknown> | undefined): Promise<CallToolResult>;
|
|
7
|
+
getToolConfig(): ToolConfig;
|
|
8
|
+
getRequiredEnvVars(): EnvVar[];
|
|
9
|
+
isConfluentCloudOnly(): boolean;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=describe-table-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-table-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/describe-table-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAS5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA+C5C,qBAAa,oBAAqB,SAAQ,eAAe;IACjD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IA0F1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { getEnsuredParam } from "../../../../../confluent/helpers.js";
|
|
2
|
+
import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
|
|
3
|
+
import { resolveCatalogName, resolveDatabaseName, getSchemaMapping, resolveToSchemaName, } from "../../../../../confluent/tools/handlers/flink/catalog/catalog-resolver.js";
|
|
4
|
+
import { executeFlinkSql } from "../../../../../confluent/tools/handlers/flink/flink-sql-helper.js";
|
|
5
|
+
import { ToolName } from "../../../../../confluent/tools/tool-name.js";
|
|
6
|
+
import env from "../../../../../env.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
const describeTableArguments = z.object({
|
|
9
|
+
baseUrl: z
|
|
10
|
+
.string()
|
|
11
|
+
.describe("The base URL of the Flink REST API.")
|
|
12
|
+
.url()
|
|
13
|
+
.default(() => env.FLINK_REST_ENDPOINT ?? "")
|
|
14
|
+
.optional(),
|
|
15
|
+
organizationId: z
|
|
16
|
+
.string()
|
|
17
|
+
.trim()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("The unique identifier for the organization."),
|
|
20
|
+
environmentId: z
|
|
21
|
+
.string()
|
|
22
|
+
.trim()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("The unique identifier for the environment."),
|
|
25
|
+
computePoolId: z
|
|
26
|
+
.string()
|
|
27
|
+
.trim()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("The id associated with the compute pool in context."),
|
|
30
|
+
catalogName: z
|
|
31
|
+
.string()
|
|
32
|
+
.trim()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("The Flink catalog name (environment ID, e.g., env-xxxxx). Omit to use defaults."),
|
|
35
|
+
databaseName: z
|
|
36
|
+
.string()
|
|
37
|
+
.trim()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("The database/schema name. Can be cluster ID (lkc-xxxxx) or friendly name. Optional."),
|
|
40
|
+
tableName: z
|
|
41
|
+
.string()
|
|
42
|
+
.trim()
|
|
43
|
+
.nonempty()
|
|
44
|
+
.describe("The name of the table to describe."),
|
|
45
|
+
});
|
|
46
|
+
export class DescribeTableHandler extends BaseToolHandler {
|
|
47
|
+
async handle(clientManager, toolArguments) {
|
|
48
|
+
const { organizationId, environmentId, computePoolId, catalogName, databaseName, tableName, baseUrl, } = describeTableArguments.parse(toolArguments);
|
|
49
|
+
const organization_id = getEnsuredParam("FLINK_ORG_ID", "Organization ID is required", organizationId);
|
|
50
|
+
const environment_id = getEnsuredParam("FLINK_ENV_ID", "Environment ID is required", environmentId);
|
|
51
|
+
const compute_pool_id = getEnsuredParam("FLINK_COMPUTE_POOL_ID", "Compute Pool ID is required", computePoolId);
|
|
52
|
+
// Smart resolution: only accept env-* format, otherwise fall back to FLINK_ENV_ID
|
|
53
|
+
const catalog_name = resolveCatalogName(catalogName);
|
|
54
|
+
if (!catalog_name) {
|
|
55
|
+
return this.createResponse("Catalog name could not be resolved. Set FLINK_ENV_ID or provide a valid environment ID (env-xxxxx).", true);
|
|
56
|
+
}
|
|
57
|
+
// Database name is optional - if provided, resolve it to friendly SCHEMA_NAME
|
|
58
|
+
const database_input = resolveDatabaseName(databaseName);
|
|
59
|
+
if (baseUrl !== undefined && baseUrl !== "") {
|
|
60
|
+
clientManager.setConfluentCloudFlinkEndpoint(baseUrl);
|
|
61
|
+
}
|
|
62
|
+
// If a database was specified, resolve cluster ID to friendly name
|
|
63
|
+
let schema_name;
|
|
64
|
+
if (database_input) {
|
|
65
|
+
const mappings = await getSchemaMapping(clientManager, catalog_name, {
|
|
66
|
+
organizationId: organization_id,
|
|
67
|
+
environmentId: environment_id,
|
|
68
|
+
computePoolId: compute_pool_id,
|
|
69
|
+
});
|
|
70
|
+
schema_name = resolveToSchemaName(database_input, mappings);
|
|
71
|
+
}
|
|
72
|
+
// Query INFORMATION_SCHEMA.COLUMNS for full schema details
|
|
73
|
+
// Must fully qualify with catalog and use backticks per Confluent Cloud requirements
|
|
74
|
+
// If schema_name is provided, filter by it; otherwise search all databases for the table
|
|
75
|
+
const schemaFilter = schema_name
|
|
76
|
+
? ` AND \`TABLE_SCHEMA\` = '${schema_name}'`
|
|
77
|
+
: "";
|
|
78
|
+
const sql = `SELECT \`TABLE_SCHEMA\`, \`COLUMN_NAME\`, \`ORDINAL_POSITION\`, \`DATA_TYPE\`, \`FULL_DATA_TYPE\`, \`IS_NULLABLE\`, \`IS_HIDDEN\`, \`IS_GENERATED\`, \`GENERATION_EXPRESSION\`, \`IS_METADATA\`, \`METADATA_KEY\` FROM \`${catalog_name}\`.\`INFORMATION_SCHEMA\`.\`COLUMNS\` WHERE \`TABLE_NAME\` = '${tableName}' AND \`IS_HIDDEN\` = 'NO'${schemaFilter}`;
|
|
79
|
+
const result = await executeFlinkSql(clientManager, sql, {
|
|
80
|
+
organizationId: organization_id,
|
|
81
|
+
environmentId: environment_id,
|
|
82
|
+
computePoolId: compute_pool_id,
|
|
83
|
+
});
|
|
84
|
+
if (!result.success) {
|
|
85
|
+
return this.createResponse(`Failed to describe table: ${result.error}`, true);
|
|
86
|
+
}
|
|
87
|
+
const columns = result.data ?? [];
|
|
88
|
+
if (columns.length === 0) {
|
|
89
|
+
const scope = schema_name
|
|
90
|
+
? `'${catalog_name}.${schema_name}.${tableName}'`
|
|
91
|
+
: `'${tableName}' in catalog '${catalog_name}'`;
|
|
92
|
+
return this.createResponse(`Table ${scope} not found or has no columns.`, true);
|
|
93
|
+
}
|
|
94
|
+
// Include TABLE_SCHEMA in response so user knows which database the table is in
|
|
95
|
+
return this.createResponse(`Table '${tableName}' schema:\n${JSON.stringify(columns, null, 2)}`);
|
|
96
|
+
}
|
|
97
|
+
getToolConfig() {
|
|
98
|
+
return {
|
|
99
|
+
name: ToolName.DESCRIBE_FLINK_TABLE,
|
|
100
|
+
description: "Get full schema details for a Flink table via INFORMATION_SCHEMA.COLUMNS. Returns column names, data types (including $rowtime), nullability, and metadata column info.",
|
|
101
|
+
inputSchema: describeTableArguments.shape,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
getRequiredEnvVars() {
|
|
105
|
+
return ["FLINK_API_KEY", "FLINK_API_SECRET"];
|
|
106
|
+
}
|
|
107
|
+
isConfluentCloudOnly() {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=describe-table-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-table-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/describe-table-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ClientManager } from "../../../../../confluent/client-manager.js";
|
|
2
|
+
import { CallToolResult } from "../../../../../confluent/schema.js";
|
|
3
|
+
import { BaseToolHandler, ToolConfig } from "../../../../../confluent/tools/base-tools.js";
|
|
4
|
+
import { EnvVar } from "../../../../../env-schema.js";
|
|
5
|
+
export declare class GetTableInfoHandler extends BaseToolHandler {
|
|
6
|
+
handle(clientManager: ClientManager, toolArguments: Record<string, unknown> | undefined): Promise<CallToolResult>;
|
|
7
|
+
getToolConfig(): ToolConfig;
|
|
8
|
+
getRequiredEnvVars(): EnvVar[];
|
|
9
|
+
isConfluentCloudOnly(): boolean;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=get-table-info-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-table-info-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/flink/catalog/get-table-info-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAS5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA+C5C,qBAAa,mBAAoB,SAAQ,eAAe;IAChD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAsF1B,aAAa,IAAI,UAAU;IAS3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
|