@confluentinc/mcp-confluent 1.0.2 → 1.0.4

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.
Files changed (89) hide show
  1. package/README.md +150 -0
  2. package/dist/confluent/client-manager.d.ts +9 -0
  3. package/dist/confluent/client-manager.d.ts.map +1 -1
  4. package/dist/confluent/client-manager.js +31 -2
  5. package/dist/confluent/client-manager.js.map +1 -1
  6. package/dist/confluent/middleware.d.ts +1 -0
  7. package/dist/confluent/middleware.d.ts.map +1 -1
  8. package/dist/confluent/middleware.js.map +1 -1
  9. package/dist/confluent/tools/handlers/environments/read-environment-handler.d.ts.map +1 -1
  10. package/dist/confluent/tools/handlers/environments/read-environment-handler.js +1 -1
  11. package/dist/confluent/tools/handlers/environments/read-environment-handler.js.map +1 -1
  12. package/dist/confluent/tools/handlers/schema/list-schemas-handler.d.ts.map +1 -1
  13. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js +96 -25
  14. package/dist/confluent/tools/handlers/schema/list-schemas-handler.js.map +1 -1
  15. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts +11 -0
  16. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.d.ts.map +1 -0
  17. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js +81 -0
  18. package/dist/confluent/tools/handlers/tableflow/catalog/create-tableflow-catalog-integration-handler.js.map +1 -0
  19. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts +11 -0
  20. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.d.ts.map +1 -0
  21. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js +64 -0
  22. package/dist/confluent/tools/handlers/tableflow/catalog/delete-tableflow-catalog-integration-handler.js.map +1 -0
  23. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts +11 -0
  24. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.d.ts.map +1 -0
  25. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js +74 -0
  26. package/dist/confluent/tools/handlers/tableflow/catalog/list-tableflow-catalog-integrations-handler.js.map +1 -0
  27. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts +11 -0
  28. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.d.ts.map +1 -0
  29. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js +64 -0
  30. package/dist/confluent/tools/handlers/tableflow/catalog/read-tableflow-catalog-integration-handler.js.map +1 -0
  31. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts +11 -0
  32. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.d.ts.map +1 -0
  33. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js +81 -0
  34. package/dist/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.js.map +1 -0
  35. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts +11 -0
  36. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.d.ts.map +1 -0
  37. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js +65 -0
  38. package/dist/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.js.map +1 -0
  39. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts +11 -0
  40. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.d.ts.map +1 -0
  41. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js +96 -0
  42. package/dist/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.js.map +1 -0
  43. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts +11 -0
  44. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.d.ts.map +1 -0
  45. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js +66 -0
  46. package/dist/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.js.map +1 -0
  47. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts +11 -0
  48. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.d.ts.map +1 -0
  49. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js +74 -0
  50. package/dist/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-handler.js.map +1 -0
  51. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts +11 -0
  52. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.d.ts.map +1 -0
  53. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js +66 -0
  54. package/dist/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.js.map +1 -0
  55. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts +11 -0
  56. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.d.ts.map +1 -0
  57. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js +104 -0
  58. package/dist/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.js.map +1 -0
  59. package/dist/confluent/tools/tool-factory.d.ts.map +1 -1
  60. package/dist/confluent/tools/tool-factory.js +38 -1
  61. package/dist/confluent/tools/tool-factory.js.map +1 -1
  62. package/dist/confluent/tools/tool-name.d.ts +12 -1
  63. package/dist/confluent/tools/tool-name.d.ts.map +1 -1
  64. package/dist/confluent/tools/tool-name.js +11 -0
  65. package/dist/confluent/tools/tool-name.js.map +1 -1
  66. package/dist/env-schema.d.ts +9 -0
  67. package/dist/env-schema.d.ts.map +1 -1
  68. package/dist/env-schema.js +17 -0
  69. package/dist/env-schema.js.map +1 -1
  70. package/dist/env.d.ts +3 -0
  71. package/dist/env.d.ts.map +1 -1
  72. package/dist/index.js +7 -2
  73. package/dist/index.js.map +1 -1
  74. package/dist/logger.d.ts +1 -0
  75. package/dist/logger.d.ts.map +1 -1
  76. package/dist/logger.js +4 -0
  77. package/dist/logger.js.map +1 -1
  78. package/dist/mcp/transports/http.d.ts +2 -2
  79. package/dist/mcp/transports/http.d.ts.map +1 -1
  80. package/dist/mcp/transports/http.js.map +1 -1
  81. package/dist/mcp/transports/manager.d.ts +1 -1
  82. package/dist/mcp/transports/manager.d.ts.map +1 -1
  83. package/dist/mcp/transports/manager.js +5 -5
  84. package/dist/mcp/transports/manager.js.map +1 -1
  85. package/dist/mcp/transports/sse.d.ts +2 -2
  86. package/dist/mcp/transports/sse.d.ts.map +1 -1
  87. package/dist/print-md-schema.js +1 -1
  88. package/dist/print-md-schema.js.map +1 -1
  89. package/package.json +1 -1
@@ -0,0 +1,81 @@
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 { wrapAsPathBasedClient } from "openapi-fetch";
5
+ import { z } from "zod";
6
+ const updateTableflowCatalogIntegrationArguments = z.object({
7
+ baseUrl: z
8
+ .string()
9
+ .trim()
10
+ .describe("The base url of the Tableflow REST API.")
11
+ .url()
12
+ .default(() => env.CONFLUENT_CLOUD_REST_ENDPOINT ?? "")
13
+ .optional(),
14
+ tableflowCatalogIntegrationConfig: z.object({
15
+ // Required fields
16
+ display_name: z
17
+ .string()
18
+ .describe("The name of the Kafka topic for which Tableflow is enabled."),
19
+ environment: z.object({
20
+ id: z
21
+ .string()
22
+ .describe("The unique identifier for the environment this resource belongs to."),
23
+ }),
24
+ kafka_cluster: z.object({
25
+ id: z.string().describe("ID of the referred resource"),
26
+ environment: z
27
+ .string()
28
+ .describe("Environment of the referred resource, if env-scoped"),
29
+ }),
30
+ config: z.object({
31
+ kind: z
32
+ .string()
33
+ .default("AwsGlue")
34
+ .describe("The type of the catalog integration. AwsGlue, Snowflake"),
35
+ }),
36
+ // Optional fields
37
+ suspended: z
38
+ .boolean()
39
+ .optional()
40
+ .default(false)
41
+ .describe("Indicates whether Tableflow Catalog Integration should be suspended. The API allows setting it only to false i.e resume the Catalog Integration."),
42
+ }),
43
+ });
44
+ export class UpdateTableFlowCatalogIntegrationHandler extends BaseToolHandler {
45
+ async handle(clientManager, toolArguments) {
46
+ const { baseUrl, tableflowCatalogIntegrationConfig } = updateTableflowCatalogIntegrationArguments.parse(toolArguments);
47
+ if (baseUrl !== undefined && baseUrl !== "") {
48
+ clientManager.setConfluentCloudTableflowRestEndpoint(baseUrl);
49
+ }
50
+ const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudTableflowRestClient());
51
+ const { environment, ...restOfTableflowCatalogIntegrationConfig } = tableflowCatalogIntegrationConfig;
52
+ const { data: response, error } = await pathBasedClient["/tableflow/v1/catalog-integrations"].POST({
53
+ body: {
54
+ spec: {
55
+ ...restOfTableflowCatalogIntegrationConfig,
56
+ environment: { id: environment.id }, // Only include id, as the general environment as requires readonly and resource_name
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ }, // Due to how OpenAPI specification is structured and how generators interpret it, we have to treat it as any, as
59
+ // The most likely culprit for mismatch is the reuse of a single base schema for both input (requestBody) and output (responses) evironment.
60
+ },
61
+ });
62
+ if (error) {
63
+ return this.createResponse(`Failed to update Tableflow Catalog Integration for ${tableflowCatalogIntegrationConfig.display_name}: ${JSON.stringify(error)}`, true);
64
+ }
65
+ return this.createResponse(`Tableflow Catalog Integration ${tableflowCatalogIntegrationConfig.display_name} updated: ${JSON.stringify(response)}`);
66
+ }
67
+ getToolConfig() {
68
+ return {
69
+ name: ToolName.UPDATE_TABLEFLOW_CATALOG_INTEGRATION,
70
+ description: `Make a request to update a catalog integration.`,
71
+ inputSchema: updateTableflowCatalogIntegrationArguments.shape,
72
+ };
73
+ }
74
+ getRequiredEnvVars() {
75
+ return ["TABLEFLOW_API_KEY", "TABLEFLOW_API_SECRET"];
76
+ }
77
+ isConfluentCloudOnly() {
78
+ return true;
79
+ }
80
+ }
81
+ //# sourceMappingURL=update-tableflow-catalog-integration-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-tableflow-catalog-integration-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/catalog/update-tableflow-catalog-integration-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,0CAA0C,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1D,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,CAAC,yCAAyC,CAAC;SACnD,GAAG,EAAE;SACL,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC;SACtD,QAAQ,EAAE;IACb,iCAAiC,EAAE,CAAC,CAAC,MAAM,CAAC;QAC1C,kBAAkB;QAClB,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,CAAC,6DAA6D,CAAC;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC;iBACF,MAAM,EAAE;iBACR,QAAQ,CACP,qEAAqE,CACtE;SACJ,CAAC;QACF,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACtD,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,CAAC,qDAAqD,CAAC;SACnE,CAAC;QACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,OAAO,CAAC,SAAS,CAAC;iBAClB,QAAQ,CAAC,yDAAyD,CAAC;SACvE,CAAC;QACF,kBAAkB;QAClB,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,kJAAkJ,CACnJ;KACJ,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,OAAO,wCAAyC,SAAQ,eAAe;IAC3E,KAAK,CAAC,MAAM,CACV,aAA4B,EAC5B,aAAkD;QAElD,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE,GAClD,0CAA0C,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAElE,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC5C,aAAa,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,eAAe,GAAG,qBAAqB,CAC3C,aAAa,CAAC,oCAAoC,EAAE,CACrD,CAAC;QAEF,MAAM,EAAE,WAAW,EAAE,GAAG,uCAAuC,EAAE,GAC/D,iCAAiC,CAAC;QAEpC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CACrD,oCAAoC,CACrC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,GAAG,uCAAuC;oBAC1C,WAAW,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,qFAAqF;oBAC1H,8DAA8D;iBACxD,EAAE,iHAAiH;gBAC3H,4IAA4I;aAC7I;SACF,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,cAAc,CACxB,uDAAuD,iCAAiC,CAAC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EACjI,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CACxB,iCAAiC,iCAAiC,CAAC,YAAY,aAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CACvH,CAAC;IACJ,CAAC;IACD,aAAa;QACX,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,oCAAoC;YACnD,WAAW,EAAE,iDAAiD;YAC9D,WAAW,EAAE,0CAA0C,CAAC,KAAK;SAC9D,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -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 ListTableFlowRegionsHandler 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=list-tableflow-regions-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tableflow-regions-handler.d.ts","sourceRoot":"","sources":["../../../../../src/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgC5C,qBAAa,2BAA4B,SAAQ,eAAe;IACxD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IA+B1B,aAAa,IAAI,UAAU;IAQ3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,65 @@
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 { wrapAsPathBasedClient } from "openapi-fetch";
5
+ import { z } from "zod";
6
+ const listTableFlowRegionsArguments = z.object({
7
+ baseUrl: z
8
+ .string()
9
+ .trim()
10
+ .describe("The base url of the Tableflow REST API.")
11
+ .url()
12
+ .default(() => env.CONFLUENT_CLOUD_REST_ENDPOINT ?? "")
13
+ .optional(),
14
+ cloud: z
15
+ .string()
16
+ .trim()
17
+ .optional()
18
+ .describe("Filter the results by exact match for cloud."),
19
+ pageSize: z
20
+ .string()
21
+ .trim()
22
+ .optional()
23
+ .default("10")
24
+ .describe("The pagination size of collection requests."),
25
+ pageToken: z
26
+ .string()
27
+ .trim()
28
+ .optional()
29
+ .default("0")
30
+ .describe("An opaque pagination token for collection requests."),
31
+ });
32
+ export class ListTableFlowRegionsHandler extends BaseToolHandler {
33
+ async handle(clientManager, toolArguments) {
34
+ const { cloud, baseUrl } = listTableFlowRegionsArguments.parse(toolArguments);
35
+ if (baseUrl !== undefined && baseUrl !== "") {
36
+ clientManager.setConfluentCloudTableflowRestEndpoint(baseUrl);
37
+ }
38
+ const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudTableflowRestClient());
39
+ const { data: response, error } = await pathBasedClient[`/tableflow/v1/regions?cloud=${cloud}`].GET({
40
+ params: {
41
+ path: {
42
+ cloud: cloud,
43
+ },
44
+ },
45
+ });
46
+ if (error) {
47
+ return this.createResponse(`Failed to list Tableflow regions for ${cloud}: ${JSON.stringify(error)}`, true);
48
+ }
49
+ return this.createResponse(`Tableflow Regions: ${JSON.stringify(response)}`);
50
+ }
51
+ getToolConfig() {
52
+ return {
53
+ name: ToolName.LIST_TABLEFLOW_REGIONS,
54
+ description: `Retrieve a sorted, filtered, paginated list of all tableflow regions.`,
55
+ inputSchema: listTableFlowRegionsArguments.shape,
56
+ };
57
+ }
58
+ getRequiredEnvVars() {
59
+ return ["TABLEFLOW_API_KEY", "TABLEFLOW_API_SECRET"];
60
+ }
61
+ isConfluentCloudOnly() {
62
+ return true;
63
+ }
64
+ }
65
+ //# sourceMappingURL=list-tableflow-regions-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tableflow-regions-handler.js","sourceRoot":"","sources":["../../../../../src/confluent/tools/handlers/tableflow/list-tableflow-regions-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,CAAC,yCAAyC,CAAC;SACnD,GAAG,EAAE;SACL,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC;SACtD,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,6CAA6C,CAAC;IAC1D,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,OAAO,CAAC,GAAG,CAAC;SACZ,QAAQ,CAAC,qDAAqD,CAAC;CACnE,CAAC,CAAC;AAEH,MAAM,OAAO,2BAA4B,SAAQ,eAAe;IAC9D,KAAK,CAAC,MAAM,CACV,aAA4B,EAC5B,aAAkD;QAElD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GACtB,6BAA6B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAErD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC5C,aAAa,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,eAAe,GAAG,qBAAqB,CAC3C,aAAa,CAAC,oCAAoC,EAAE,CACrD,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CACrD,+BAA+B,KAAK,EAAE,CACvC,CAAC,GAAG,CAAC;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,KAAK,EAAE,KAAK;iBACb;aACF;SACF,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,cAAc,CACxB,yCAAyC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAC1E,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CACxB,sBAAsB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CACjD,CAAC;IACJ,CAAC;IACD,aAAa;QACX,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,sBAAsB;YACrC,WAAW,EAAE,uEAAuE;YACpF,WAAW,EAAE,6BAA6B,CAAC,KAAK;SACjD,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -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 CreateTableFlowTopicHandler 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=create-tableflow-topic-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-tableflow-topic-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA2D5C,qBAAa,2BAA4B,SAAQ,eAAe;IACxD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAkD1B,aAAa,IAAI,UAAU;IAQ3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,96 @@
1
+ import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
2
+ import { getEnsuredParam } from "../../../../../confluent/helpers.js";
3
+ import { ToolName } from "../../../../../confluent/tools/tool-name.js";
4
+ import env from "../../../../../env.js";
5
+ import { wrapAsPathBasedClient } from "openapi-fetch";
6
+ import { z } from "zod";
7
+ const createTableflowTopicArguments = z.object({
8
+ baseUrl: z
9
+ .string()
10
+ .trim()
11
+ .describe("The base url of the Tableflow REST API.")
12
+ .url()
13
+ .default(() => env.CONFLUENT_CLOUD_REST_ENDPOINT ?? "")
14
+ .optional(),
15
+ tableflowTopicConfig: z.object({
16
+ // Required fields
17
+ display_name: z
18
+ .string()
19
+ .describe("The name of the Kafka topic for which Tableflow is enabled."),
20
+ storage: z.object({
21
+ kind: z
22
+ .enum(["ByobAws", "Managed"])
23
+ .default("ByobAws")
24
+ .describe("The storage type either 'Managed' or 'ByobAws'."),
25
+ bucket_name: z.string().describe("The bucket name."),
26
+ provider_integration_id: z
27
+ .string()
28
+ .describe("The provider integration id."),
29
+ }),
30
+ // Optional fields
31
+ suspended: z
32
+ .boolean()
33
+ .optional()
34
+ .default(false)
35
+ .describe("Indicates whether Tableflow should be suspended. The API allows setting it only to false i.e resume the Tableflow."),
36
+ config: z.object({
37
+ retention_ms: z
38
+ .string()
39
+ .default("6048000000") // equivalent to 7 days
40
+ .describe("The maximum age, in milliseconds, of snapshots (for Iceberg) or versions(for Delta) to retain in the table for the Tableflow-enabled topic."),
41
+ record_failure_strategy: z
42
+ .string()
43
+ .default("SUSPEND")
44
+ .describe("The strategy to handle record failures in the Tableflow enabled topic during materialization."),
45
+ }),
46
+ table_formats: z
47
+ .array(z.string())
48
+ .default(["ICEBERG"])
49
+ .describe("The supported table formats for the Tableflow-enabled topic e.g ICEBERG, DELTA"),
50
+ }),
51
+ });
52
+ export class CreateTableFlowTopicHandler extends BaseToolHandler {
53
+ async handle(clientManager, toolArguments) {
54
+ const { baseUrl, tableflowTopicConfig } = createTableflowTopicArguments.parse(toolArguments);
55
+ const environment_id = getEnsuredParam("KAFKA_ENV_ID", "Environment ID is required");
56
+ const kafka_cluster_id = getEnsuredParam("KAFKA_CLUSTER_ID", "Kafka Cluster ID is required");
57
+ if (baseUrl !== undefined && baseUrl !== "") {
58
+ clientManager.setConfluentCloudTableflowRestEndpoint(baseUrl);
59
+ }
60
+ const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudTableflowRestClient());
61
+ const { data: response, error } = await pathBasedClient["/tableflow/v1/tableflow-topics"].POST({
62
+ body: {
63
+ spec: {
64
+ environment: {
65
+ id: environment_id, // Only include id, as the general environment object also requires readonly and resource_name
66
+ },
67
+ kafka_cluster: {
68
+ id: kafka_cluster_id,
69
+ environment: environment_id,
70
+ },
71
+ ...tableflowTopicConfig,
72
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
+ }, // Due to how OpenAPI specification is structured and how generators interpret it, we have to treat it as any, as
74
+ // The most likely culprit for mismatch is the reuse of a single base schema for both input (requestBody) and output (responses) evironment.
75
+ },
76
+ });
77
+ if (error) {
78
+ return this.createResponse(`Failed to create Tableflow topic for ${tableflowTopicConfig.display_name}: ${JSON.stringify(error)}`, true);
79
+ }
80
+ return this.createResponse(`Tableflow Topic ${tableflowTopicConfig.display_name} created: ${JSON.stringify(response)}`);
81
+ }
82
+ getToolConfig() {
83
+ return {
84
+ name: ToolName.CREATE_TABLEFLOW_TOPIC,
85
+ description: `Make a request to create a tableflow topic.`,
86
+ inputSchema: createTableflowTopicArguments.shape,
87
+ };
88
+ }
89
+ getRequiredEnvVars() {
90
+ return ["TABLEFLOW_API_KEY", "TABLEFLOW_API_SECRET"];
91
+ }
92
+ isConfluentCloudOnly() {
93
+ return true;
94
+ }
95
+ }
96
+ //# sourceMappingURL=create-tableflow-topic-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-tableflow-topic-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/create-tableflow-topic-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,CAAC,yCAAyC,CAAC;SACnD,GAAG,EAAE;SACL,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC;SACtD,QAAQ,EAAE;IACb,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC;QAC7B,kBAAkB;QAClB,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,CAAC,6DAA6D,CAAC;QAC1E,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,IAAI,EAAE,CAAC;iBACJ,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;iBAC5B,OAAO,CAAC,SAAS,CAAC;iBAClB,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACpD,uBAAuB,EAAE,CAAC;iBACvB,MAAM,EAAE;iBACR,QAAQ,CAAC,8BAA8B,CAAC;SAC5C,CAAC;QACF,kBAAkB;QAClB,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,oHAAoH,CACrH;QACH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,OAAO,CAAC,YAAY,CAAC,CAAC,uBAAuB;iBAC7C,QAAQ,CACP,6IAA6I,CAC9I;YACH,uBAAuB,EAAE,CAAC;iBACvB,MAAM,EAAE;iBACR,OAAO,CAAC,SAAS,CAAC;iBAClB,QAAQ,CACP,+FAA+F,CAChG;SACJ,CAAC;QACF,aAAa,EAAE,CAAC;aACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;aACpB,QAAQ,CACP,gFAAgF,CACjF;KACJ,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,OAAO,2BAA4B,SAAQ,eAAe;IAC9D,KAAK,CAAC,MAAM,CACV,aAA4B,EAC5B,aAAkD;QAElD,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,GACrC,6BAA6B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAErD,MAAM,cAAc,GAAG,eAAe,CACpC,cAAc,EACd,4BAA4B,CAC7B,CAAC;QAEF,MAAM,gBAAgB,GAAG,eAAe,CACtC,kBAAkB,EAClB,8BAA8B,CAC/B,CAAC;QAEF,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC5C,aAAa,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,eAAe,GAAG,qBAAqB,CAC3C,aAAa,CAAC,oCAAoC,EAAE,CACrD,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CACrD,gCAAgC,CACjC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE;oBACJ,WAAW,EAAE;wBACX,EAAE,EAAE,cAAc,EAAE,8FAA8F;qBACnH;oBACD,aAAa,EAAE;wBACb,EAAE,EAAE,gBAAgB;wBACpB,WAAW,EAAE,cAAc;qBAC5B;oBACD,GAAG,oBAAoB;oBACvB,8DAA8D;iBACxD,EAAE,iHAAiH;gBAC3H,4IAA4I;aAC7I;SACF,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,cAAc,CACxB,yCAAyC,oBAAoB,CAAC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EACtG,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CACxB,mBAAmB,oBAAoB,CAAC,YAAY,aAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,aAAa;QACX,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,sBAAsB;YACrC,WAAW,EAAE,6CAA6C;YAC1D,WAAW,EAAE,6BAA6B,CAAC,KAAK;SACjD,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -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 DeleteTableFlowTopicHandler 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=delete-tableflow-topic-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-tableflow-topic-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-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;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA4B5C,qBAAa,2BAA4B,SAAQ,eAAe;IACxD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IA8C1B,aAAa,IAAI,UAAU;IAQ3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,66 @@
1
+ import { getEnsuredParam } from "../../../../../confluent/helpers.js";
2
+ import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
3
+ import { ToolName } from "../../../../../confluent/tools/tool-name.js";
4
+ import env from "../../../../../env.js";
5
+ import { wrapAsPathBasedClient } from "openapi-fetch";
6
+ import { z } from "zod";
7
+ const deleteTableflowTopicArguments = z.object({
8
+ baseUrl: z
9
+ .string()
10
+ .trim()
11
+ .describe("The base url of the Tableflow REST API.")
12
+ .url()
13
+ .default(() => env.CONFLUENT_CLOUD_REST_ENDPOINT ?? "")
14
+ .optional(),
15
+ display_name: z
16
+ .string()
17
+ .describe("The name of the Kafka topic for which Tableflow is enabled."),
18
+ environmentId: z
19
+ .string()
20
+ .trim()
21
+ .optional()
22
+ .describe("Scope the operation to the given environment."),
23
+ clusterId: z
24
+ .string()
25
+ .trim()
26
+ .optional()
27
+ .describe("Scope the operation to the give Kafka cluster."),
28
+ });
29
+ export class DeleteTableFlowTopicHandler extends BaseToolHandler {
30
+ async handle(clientManager, toolArguments) {
31
+ const { display_name, environmentId, clusterId, baseUrl } = deleteTableflowTopicArguments.parse(toolArguments);
32
+ const environment_id = getEnsuredParam("KAFKA_ENV_ID", "Environment ID is required", environmentId);
33
+ const kafka_cluster_id = getEnsuredParam("KAFKA_CLUSTER_ID", "Kafka Cluster ID is required", clusterId);
34
+ if (baseUrl !== undefined && baseUrl !== "") {
35
+ clientManager.setConfluentCloudTableflowRestEndpoint(baseUrl);
36
+ }
37
+ const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudTableflowRestClient());
38
+ const { data: response, error } = await pathBasedClient[`/tableflow/v1/tableflow-topics/${display_name}?environment=${environment_id}&spec.kafka_cluster=${kafka_cluster_id}`].DELETE({
39
+ params: {
40
+ path: {
41
+ display_name: display_name,
42
+ environment_id: environment_id,
43
+ kafka_cluster_id: kafka_cluster_id,
44
+ },
45
+ },
46
+ });
47
+ if (error) {
48
+ return this.createResponse(`Failed to delete Tableflow topic ${display_name}: ${JSON.stringify(error)}`, true);
49
+ }
50
+ return this.createResponse(`Tableflow Topic ${display_name} deleted: ${JSON.stringify(response)}`);
51
+ }
52
+ getToolConfig() {
53
+ return {
54
+ name: ToolName.DELETE_TABLEFLOW_TOPIC,
55
+ description: `Make a request to delete a tableflow topic.`,
56
+ inputSchema: deleteTableflowTopicArguments.shape,
57
+ };
58
+ }
59
+ getRequiredEnvVars() {
60
+ return ["TABLEFLOW_API_KEY", "TABLEFLOW_API_SECRET"];
61
+ }
62
+ isConfluentCloudOnly() {
63
+ return true;
64
+ }
65
+ }
66
+ //# sourceMappingURL=delete-tableflow-topic-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-tableflow-topic-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/delete-tableflow-topic-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,CAAC,yCAAyC,CAAC;SACnD,GAAG,EAAE;SACL,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC;SACtD,QAAQ,EAAE;IACb,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,OAAO,2BAA4B,SAAQ,eAAe;IAC9D,KAAK,CAAC,MAAM,CACV,aAA4B,EAC5B,aAAkD;QAElD,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,GACvD,6BAA6B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAErD,MAAM,cAAc,GAAG,eAAe,CACpC,cAAc,EACd,4BAA4B,EAC5B,aAAa,CACd,CAAC;QAEF,MAAM,gBAAgB,GAAG,eAAe,CACtC,kBAAkB,EAClB,8BAA8B,EAC9B,SAAS,CACV,CAAC;QAEF,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC5C,aAAa,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,eAAe,GAAG,qBAAqB,CAC3C,aAAa,CAAC,oCAAoC,EAAE,CACrD,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CACrD,kCAAkC,YAAY,gBAAgB,cAAc,uBAAuB,gBAAgB,EAAE,CACtH,CAAC,MAAM,CAAC;YACP,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,YAAY,EAAE,YAAY;oBAC1B,cAAc,EAAE,cAAc;oBAC9B,gBAAgB,EAAE,gBAAgB;iBACnC;aACF;SACF,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,cAAc,CACxB,oCAAoC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAC5E,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CACxB,mBAAmB,YAAY,aAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CACvE,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,sBAAsB;YACrC,WAAW,EAAE,6CAA6C;YAC1D,WAAW,EAAE,6BAA6B,CAAC,KAAK;SACjD,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -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 ListTableFlowTopicsHandler 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=list-tableflow-topics-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tableflow-topics-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-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;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAuC5C,qBAAa,0BAA2B,SAAQ,eAAe;IACvD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAyC1B,aAAa,IAAI,UAAU;IAQ3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,74 @@
1
+ import { getEnsuredParam } from "../../../../../confluent/helpers.js";
2
+ import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
3
+ import { ToolName } from "../../../../../confluent/tools/tool-name.js";
4
+ import env from "../../../../../env.js";
5
+ import { wrapAsPathBasedClient } from "openapi-fetch";
6
+ import { z } from "zod";
7
+ const listTableFlowTopicArguments = z.object({
8
+ baseUrl: z
9
+ .string()
10
+ .trim()
11
+ .describe("The base url of the Tableflow REST API.")
12
+ .url()
13
+ .default(() => env.CONFLUENT_CLOUD_REST_ENDPOINT ?? "")
14
+ .optional(),
15
+ environmentId: z
16
+ .string()
17
+ .trim()
18
+ .optional()
19
+ .describe("The unique identifier for the enviornment this resource belongs to."),
20
+ clusterId: z
21
+ .string()
22
+ .trim()
23
+ .optional()
24
+ .describe("The unique identifier for the Kafka Cluster."),
25
+ pageSize: z
26
+ .string()
27
+ .trim()
28
+ .optional()
29
+ .default("10")
30
+ .describe("The pagination size of collection requests."),
31
+ pageToken: z
32
+ .string()
33
+ .trim()
34
+ .optional()
35
+ .default("0")
36
+ .describe("An opaque pagination token for collection requests."),
37
+ });
38
+ export class ListTableFlowTopicsHandler extends BaseToolHandler {
39
+ async handle(clientManager, toolArguments) {
40
+ const { clusterId, environmentId, baseUrl } = listTableFlowTopicArguments.parse(toolArguments);
41
+ const environment_id = getEnsuredParam("KAFKA_ENV_ID", "Environment ID is required", environmentId);
42
+ const kafka_cluster_id = getEnsuredParam("KAFKA_CLUSTER_ID", "Kafka Cluster ID is required", clusterId);
43
+ if (baseUrl !== undefined && baseUrl !== "") {
44
+ clientManager.setConfluentCloudTableflowRestEndpoint(baseUrl);
45
+ }
46
+ const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudTableflowRestClient());
47
+ const { data: response, error } = await pathBasedClient[`/tableflow/v1/tableflow-topics?environment=${environment_id}&spec.kafka_cluster=${kafka_cluster_id}`].GET({
48
+ params: {
49
+ path: {
50
+ environment_id: environment_id,
51
+ kafka_cluster_id: kafka_cluster_id,
52
+ },
53
+ },
54
+ });
55
+ if (error) {
56
+ return this.createResponse(`Failed to list Tableflow topics for ${clusterId}: ${JSON.stringify(error)}`, true);
57
+ }
58
+ return this.createResponse(`Tableflow Topics: ${JSON.stringify(response)}`);
59
+ }
60
+ getToolConfig() {
61
+ return {
62
+ name: ToolName.LIST_TABLEFLOW_TOPICS,
63
+ description: `Retrieve a sorted, filtered, paginated list of all tableflow topics.`,
64
+ inputSchema: listTableFlowTopicArguments.shape,
65
+ };
66
+ }
67
+ getRequiredEnvVars() {
68
+ return ["TABLEFLOW_API_KEY", "TABLEFLOW_API_SECRET"];
69
+ }
70
+ isConfluentCloudOnly() {
71
+ return true;
72
+ }
73
+ }
74
+ //# sourceMappingURL=list-tableflow-topics-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tableflow-topics-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/list-tableflow-topics-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 ReadTableFlowTopicHandler 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=read-tableflow-topic-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-tableflow-topic-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-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;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA4B5C,qBAAa,yBAA0B,SAAQ,eAAe;IACtD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IA4C1B,aAAa,IAAI,UAAU;IAQ3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}
@@ -0,0 +1,66 @@
1
+ import { getEnsuredParam } from "../../../../../confluent/helpers.js";
2
+ import { BaseToolHandler, } from "../../../../../confluent/tools/base-tools.js";
3
+ import { ToolName } from "../../../../../confluent/tools/tool-name.js";
4
+ import env from "../../../../../env.js";
5
+ import { wrapAsPathBasedClient } from "openapi-fetch";
6
+ import { z } from "zod";
7
+ const readTableflowTopicArguments = z.object({
8
+ baseUrl: z
9
+ .string()
10
+ .trim()
11
+ .describe("The base url of the Tableflow REST API.")
12
+ .url()
13
+ .default(() => env.CONFLUENT_CLOUD_REST_ENDPOINT ?? "")
14
+ .optional(),
15
+ display_name: z
16
+ .string()
17
+ .describe("The name of the Kafka topic for which Tableflow is enabled."),
18
+ environmentId: z
19
+ .string()
20
+ .trim()
21
+ .optional()
22
+ .describe("Scope the operation to the given environment."),
23
+ clusterId: z
24
+ .string()
25
+ .trim()
26
+ .optional()
27
+ .describe("Scope the operation to the give Kafka cluster."),
28
+ });
29
+ export class ReadTableFlowTopicHandler extends BaseToolHandler {
30
+ async handle(clientManager, toolArguments) {
31
+ const { display_name, environmentId, clusterId, baseUrl } = readTableflowTopicArguments.parse(toolArguments);
32
+ const environment_id = getEnsuredParam("KAFKA_ENV_ID", "Environment ID is required", environmentId);
33
+ const kafka_cluster_id = getEnsuredParam("KAFKA_CLUSTER_ID", "Kafka Cluster ID is required", clusterId);
34
+ if (baseUrl !== undefined && baseUrl !== "") {
35
+ clientManager.setConfluentCloudTableflowRestEndpoint(baseUrl);
36
+ }
37
+ const pathBasedClient = wrapAsPathBasedClient(clientManager.getConfluentCloudTableflowRestClient());
38
+ const { data: response, error } = await pathBasedClient[`/tableflow/v1/tableflow-topics/${display_name}?environment=${environment_id}&spec.kafka_cluster=${kafka_cluster_id}`].GET({
39
+ params: {
40
+ path: {
41
+ display_name: display_name,
42
+ environment_id: environment_id,
43
+ kafka_cluster_id: kafka_cluster_id,
44
+ },
45
+ },
46
+ });
47
+ if (error) {
48
+ return this.createResponse(`Failed to read Tableflow topic ${display_name}: ${JSON.stringify(error)}`, true);
49
+ }
50
+ return this.createResponse(`Tableflow Topic: ${JSON.stringify(response)}`);
51
+ }
52
+ getToolConfig() {
53
+ return {
54
+ name: ToolName.READ_TABLEFLOW_TOPIC,
55
+ description: `Make a request to read a tableflow topic.`,
56
+ inputSchema: readTableflowTopicArguments.shape,
57
+ };
58
+ }
59
+ getRequiredEnvVars() {
60
+ return ["TABLEFLOW_API_KEY", "TABLEFLOW_API_SECRET"];
61
+ }
62
+ isConfluentCloudOnly() {
63
+ return true;
64
+ }
65
+ }
66
+ //# sourceMappingURL=read-tableflow-topic-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-tableflow-topic-handler.js","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/read-tableflow-topic-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EACL,eAAe,GAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,CAAC,yCAAyC,CAAC;SACnD,GAAG,EAAE;SACL,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC;SACtD,QAAQ,EAAE;IACb,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D,KAAK,CAAC,MAAM,CACV,aAA4B,EAC5B,aAAkD;QAElD,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,GACvD,2BAA2B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAEnD,MAAM,cAAc,GAAG,eAAe,CACpC,cAAc,EACd,4BAA4B,EAC5B,aAAa,CACd,CAAC;QAEF,MAAM,gBAAgB,GAAG,eAAe,CACtC,kBAAkB,EAClB,8BAA8B,EAC9B,SAAS,CACV,CAAC;QAEF,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC5C,aAAa,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,eAAe,GAAG,qBAAqB,CAC3C,aAAa,CAAC,oCAAoC,EAAE,CACrD,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CACrD,kCAAkC,YAAY,gBAAgB,cAAc,uBAAuB,gBAAgB,EAAE,CACtH,CAAC,GAAG,CAAC;YACJ,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,YAAY,EAAE,YAAY;oBAC1B,cAAc,EAAE,cAAc;oBAC9B,gBAAgB,EAAE,gBAAgB;iBACnC;aACF;SACF,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,cAAc,CACxB,kCAAkC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAC1E,IAAI,CACL,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,aAAa;QACX,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,oBAAoB;YACnC,WAAW,EAAE,2CAA2C;YACxD,WAAW,EAAE,2BAA2B,CAAC,KAAK;SAC/C,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -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 UpdateTableFlowTopicHandler 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=update-tableflow-topic-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-tableflow-topic-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/confluent/tools/handlers/tableflow/topic/update-tableflow-topic-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,UAAU,EACX,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAwE5C,qBAAa,2BAA4B,SAAQ,eAAe;IACxD,MAAM,CACV,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACjD,OAAO,CAAC,cAAc,CAAC;IAyC1B,aAAa,IAAI,UAAU;IAQ3B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,oBAAoB,IAAI,OAAO;CAGhC"}