mcp-server-rocketchat-threads 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 +21 -0
- package/README.md +332 -0
- package/dist/api/client.d.ts +119 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +305 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/index.d.ts +6 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +22 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/schemas.d.ts +10636 -0
- package/dist/api/schemas.d.ts.map +1 -0
- package/dist/api/schemas.js +267 -0
- package/dist/api/schemas.js.map +1 -0
- package/dist/api/types.d.ts +263 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +7 -0
- package/dist/api/types.js.map +1 -0
- package/dist/config/config.d.ts +37 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +79 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/di/container.d.ts +101 -0
- package/dist/di/container.d.ts.map +1 -0
- package/dist/di/container.js +214 -0
- package/dist/di/container.js.map +1 -0
- package/dist/di/index.d.ts +6 -0
- package/dist/di/index.d.ts.map +1 -0
- package/dist/di/index.js +12 -0
- package/dist/di/index.js.map +1 -0
- package/dist/formatters/index.d.ts +6 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +22 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/message-formatter.d.ts +64 -0
- package/dist/formatters/message-formatter.d.ts.map +1 -0
- package/dist/formatters/message-formatter.js +161 -0
- package/dist/formatters/message-formatter.js.map +1 -0
- package/dist/formatters/response-builder.d.ts +60 -0
- package/dist/formatters/response-builder.d.ts.map +1 -0
- package/dist/formatters/response-builder.js +108 -0
- package/dist/formatters/response-builder.js.map +1 -0
- package/dist/guards/index.d.ts +12 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +42 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/input-validator.d.ts +89 -0
- package/dist/guards/input-validator.d.ts.map +1 -0
- package/dist/guards/input-validator.js +266 -0
- package/dist/guards/input-validator.js.map +1 -0
- package/dist/guards/rate-limiter.d.ts +115 -0
- package/dist/guards/rate-limiter.d.ts.map +1 -0
- package/dist/guards/rate-limiter.js +226 -0
- package/dist/guards/rate-limiter.js.map +1 -0
- package/dist/guards/sanitizer.d.ts +35 -0
- package/dist/guards/sanitizer.d.ts.map +1 -0
- package/dist/guards/sanitizer.js +111 -0
- package/dist/guards/sanitizer.js.map +1 -0
- package/dist/guards/write-guard.d.ts +33 -0
- package/dist/guards/write-guard.d.ts.map +1 -0
- package/dist/guards/write-guard.js +90 -0
- package/dist/guards/write-guard.js.map +1 -0
- package/dist/http-server.d.ts +9 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +190 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +114 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/base.d.ts +85 -0
- package/dist/tools/base.d.ts.map +1 -0
- package/dist/tools/base.js +184 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/channel-tools.d.ts +18 -0
- package/dist/tools/channel-tools.d.ts.map +1 -0
- package/dist/tools/channel-tools.js +151 -0
- package/dist/tools/channel-tools.js.map +1 -0
- package/dist/tools/handler-utils.d.ts +75 -0
- package/dist/tools/handler-utils.d.ts.map +1 -0
- package/dist/tools/handler-utils.js +105 -0
- package/dist/tools/handler-utils.js.map +1 -0
- package/dist/tools/index.d.ts +17 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +40 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/message-tools.d.ts +20 -0
- package/dist/tools/message-tools.d.ts.map +1 -0
- package/dist/tools/message-tools.js +194 -0
- package/dist/tools/message-tools.js.map +1 -0
- package/dist/tools/thread-tools.d.ts +23 -0
- package/dist/tools/thread-tools.d.ts.map +1 -0
- package/dist/tools/thread-tools.js +243 -0
- package/dist/tools/thread-tools.js.map +1 -0
- package/dist/tools/user-tools.d.ts +14 -0
- package/dist/tools/user-tools.d.ts.map +1 -0
- package/dist/tools/user-tools.js +120 -0
- package/dist/tools/user-tools.js.map +1 -0
- package/dist/tools/write-tools.d.ts +15 -0
- package/dist/tools/write-tools.d.ts.map +1 -0
- package/dist/tools/write-tools.js +181 -0
- package/dist/tools/write-tools.js.map +1 -0
- package/dist/utils/cache.d.ts +47 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +116 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/error-handler.d.ts +64 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +148 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +50 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +118 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/time-parser.d.ts +37 -0
- package/dist/utils/time-parser.d.ts.map +1 -0
- package/dist/utils/time-parser.js +98 -0
- package/dist/utils/time-parser.js.map +1 -0
- package/dist/utils/token-counter.d.ts +42 -0
- package/dist/utils/token-counter.d.ts.map +1 -0
- package/dist/utils/token-counter.js +81 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Tool Definitions
|
|
3
|
+
* Common types and utilities for MCP tools
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { ErrorCode } from '../utils/error-handler.js';
|
|
7
|
+
/**
|
|
8
|
+
* Tool parameter schemas
|
|
9
|
+
*/
|
|
10
|
+
export declare const CommonSchemas: {
|
|
11
|
+
roomId: z.ZodString;
|
|
12
|
+
roomName: z.ZodString;
|
|
13
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
14
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
15
|
+
timeRange: z.ZodString;
|
|
16
|
+
query: z.ZodString;
|
|
17
|
+
threadId: z.ZodString;
|
|
18
|
+
userId: z.ZodString;
|
|
19
|
+
username: z.ZodString;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Tool result interface matching MCP specification
|
|
23
|
+
*/
|
|
24
|
+
export interface ToolResult {
|
|
25
|
+
content: Array<{
|
|
26
|
+
type: 'text';
|
|
27
|
+
text: string;
|
|
28
|
+
}>;
|
|
29
|
+
isError?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a successful tool result
|
|
33
|
+
*/
|
|
34
|
+
export declare function createToolResult(data: unknown): ToolResult;
|
|
35
|
+
/**
|
|
36
|
+
* Create an error tool result
|
|
37
|
+
*/
|
|
38
|
+
export declare function createErrorResult(code: string, message: string, details?: string, suggestion?: string): ToolResult;
|
|
39
|
+
/**
|
|
40
|
+
* Create an error result from an exception
|
|
41
|
+
* Automatically extracts message and details from error objects
|
|
42
|
+
*/
|
|
43
|
+
export declare function createErrorResultFromException(code: ErrorCode, defaultMessage: string, error: unknown): ToolResult;
|
|
44
|
+
/**
|
|
45
|
+
* Wraps an async handler with standardized error handling
|
|
46
|
+
* Reduces boilerplate try-catch blocks in tool handlers
|
|
47
|
+
*/
|
|
48
|
+
export declare function wrapHandler<TParams>(handler: (params: TParams) => Promise<ToolResult>, errorCode?: ErrorCode, errorMessage?: string): (params: TParams) => Promise<ToolResult>;
|
|
49
|
+
export { ErrorCodes } from '../utils/error-handler.js';
|
|
50
|
+
export type { ErrorCode } from '../utils/error-handler.js';
|
|
51
|
+
/**
|
|
52
|
+
* Tool definition interface with generic type parameter for type-safe handlers
|
|
53
|
+
* @template T - The type of parameters accepted by the handler
|
|
54
|
+
*/
|
|
55
|
+
export interface ToolDefinition<T = unknown> {
|
|
56
|
+
name: string;
|
|
57
|
+
description: string;
|
|
58
|
+
inputSchema: z.ZodType<T>;
|
|
59
|
+
handler: (params: T) => Promise<ToolResult>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Helper function to create a type-safe tool definition
|
|
63
|
+
* Infers the parameter type from the Zod schema
|
|
64
|
+
*/
|
|
65
|
+
export declare function defineTool<T extends z.ZodType>(name: string, description: string, inputSchema: T, handler: (params: z.infer<T>) => Promise<ToolResult>): ToolDefinition<z.infer<T>>;
|
|
66
|
+
/**
|
|
67
|
+
* Registry of all tools
|
|
68
|
+
*/
|
|
69
|
+
export declare class ToolRegistry {
|
|
70
|
+
private tools;
|
|
71
|
+
register<T>(tool: ToolDefinition<T>): void;
|
|
72
|
+
get(name: string): ToolDefinition<unknown> | undefined;
|
|
73
|
+
list(): ToolDefinition<unknown>[];
|
|
74
|
+
getSchemas(): Array<{
|
|
75
|
+
name: string;
|
|
76
|
+
description: string;
|
|
77
|
+
inputSchema: unknown;
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Convert Zod schema to JSON Schema for MCP
|
|
82
|
+
*/
|
|
83
|
+
export declare function zodToJsonSchema(schema: z.ZodType<unknown>): Record<string, unknown>;
|
|
84
|
+
export declare const toolRegistry: ToolRegistry;
|
|
85
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/tools/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACH,SAAS,EAKZ,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;CAqBzB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAO1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GACpB,UAAU,CAgBZ;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,SAAS,EACf,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,OAAO,GACf,UAAU,CAIZ;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,EACjD,SAAS,GAAE,SAAgC,EAC3C,YAAY,GAAE,MAA2B,GAC1C,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAQ1C;AAGD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAC1C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,EACd,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,GACrD,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAO5B;AAED;;GAEG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,KAAK,CAAmD;IAEhE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAK1C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,SAAS;IAItD,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE;IAIjC,UAAU,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;CAOnF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4DnF;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base Tool Definitions
|
|
4
|
+
* Common types and utilities for MCP tools
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.toolRegistry = exports.ToolRegistry = exports.ErrorCodes = exports.CommonSchemas = void 0;
|
|
8
|
+
exports.createToolResult = createToolResult;
|
|
9
|
+
exports.createErrorResult = createErrorResult;
|
|
10
|
+
exports.createErrorResultFromException = createErrorResultFromException;
|
|
11
|
+
exports.wrapHandler = wrapHandler;
|
|
12
|
+
exports.defineTool = defineTool;
|
|
13
|
+
exports.zodToJsonSchema = zodToJsonSchema;
|
|
14
|
+
const zod_1 = require("zod");
|
|
15
|
+
const error_handler_js_1 = require("../utils/error-handler.js");
|
|
16
|
+
/**
|
|
17
|
+
* Tool parameter schemas
|
|
18
|
+
*/
|
|
19
|
+
exports.CommonSchemas = {
|
|
20
|
+
// Room/Channel identification
|
|
21
|
+
roomId: zod_1.z.string().describe('Unique room/channel ID (e.g., "GENERAL", "x3JG6uXJgE7YNHR3S")'),
|
|
22
|
+
roomName: zod_1.z.string().describe('Room/channel name for human-readable lookup'),
|
|
23
|
+
// Pagination
|
|
24
|
+
limit: zod_1.z.number().min(1).max(100).default(50).describe('Maximum number of items to return (1-100, default: 50)'),
|
|
25
|
+
offset: zod_1.z.number().min(0).default(0).describe('Number of items to skip for pagination'),
|
|
26
|
+
// Time expressions
|
|
27
|
+
timeRange: zod_1.z.string().describe('Time range: relative (1d, 7d, 1w, 1m) or ISO date (2024-01-15) or Unix timestamp'),
|
|
28
|
+
// Search
|
|
29
|
+
query: zod_1.z.string().describe('Search query text'),
|
|
30
|
+
// Thread
|
|
31
|
+
threadId: zod_1.z.string().describe('Thread parent message ID (tmid)'),
|
|
32
|
+
// User
|
|
33
|
+
userId: zod_1.z.string().describe('User ID'),
|
|
34
|
+
username: zod_1.z.string().describe('Username (without @)')
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Create a successful tool result
|
|
38
|
+
*/
|
|
39
|
+
function createToolResult(data) {
|
|
40
|
+
return {
|
|
41
|
+
content: [{
|
|
42
|
+
type: 'text',
|
|
43
|
+
text: JSON.stringify(data, null, 2)
|
|
44
|
+
}]
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create an error tool result
|
|
49
|
+
*/
|
|
50
|
+
function createErrorResult(code, message, details, suggestion) {
|
|
51
|
+
return {
|
|
52
|
+
content: [{
|
|
53
|
+
type: 'text',
|
|
54
|
+
text: JSON.stringify({
|
|
55
|
+
success: false,
|
|
56
|
+
error: {
|
|
57
|
+
code,
|
|
58
|
+
message,
|
|
59
|
+
details,
|
|
60
|
+
suggestion: suggestion || error_handler_js_1.ErrorSuggestions[code]
|
|
61
|
+
}
|
|
62
|
+
}, null, 2)
|
|
63
|
+
}],
|
|
64
|
+
isError: true
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create an error result from an exception
|
|
69
|
+
* Automatically extracts message and details from error objects
|
|
70
|
+
*/
|
|
71
|
+
function createErrorResultFromException(code, defaultMessage, error) {
|
|
72
|
+
const message = (0, error_handler_js_1.extractErrorMessage)(error);
|
|
73
|
+
const details = (0, error_handler_js_1.extractErrorDetails)(error);
|
|
74
|
+
return createErrorResult(code, message || defaultMessage, details);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Wraps an async handler with standardized error handling
|
|
78
|
+
* Reduces boilerplate try-catch blocks in tool handlers
|
|
79
|
+
*/
|
|
80
|
+
function wrapHandler(handler, errorCode = error_handler_js_1.ErrorCodes.API_ERROR, errorMessage = 'Operation failed') {
|
|
81
|
+
return async (params) => {
|
|
82
|
+
try {
|
|
83
|
+
return await handler(params);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return createErrorResultFromException(errorCode, errorMessage, error);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Re-export error codes for convenience
|
|
91
|
+
var error_handler_js_2 = require("../utils/error-handler.js");
|
|
92
|
+
Object.defineProperty(exports, "ErrorCodes", { enumerable: true, get: function () { return error_handler_js_2.ErrorCodes; } });
|
|
93
|
+
/**
|
|
94
|
+
* Helper function to create a type-safe tool definition
|
|
95
|
+
* Infers the parameter type from the Zod schema
|
|
96
|
+
*/
|
|
97
|
+
function defineTool(name, description, inputSchema, handler) {
|
|
98
|
+
return {
|
|
99
|
+
name,
|
|
100
|
+
description,
|
|
101
|
+
inputSchema,
|
|
102
|
+
handler
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Registry of all tools
|
|
107
|
+
*/
|
|
108
|
+
class ToolRegistry {
|
|
109
|
+
tools = new Map();
|
|
110
|
+
register(tool) {
|
|
111
|
+
// Store as ToolDefinition<unknown> for the registry
|
|
112
|
+
this.tools.set(tool.name, tool);
|
|
113
|
+
}
|
|
114
|
+
get(name) {
|
|
115
|
+
return this.tools.get(name);
|
|
116
|
+
}
|
|
117
|
+
list() {
|
|
118
|
+
return Array.from(this.tools.values());
|
|
119
|
+
}
|
|
120
|
+
getSchemas() {
|
|
121
|
+
return this.list().map(tool => ({
|
|
122
|
+
name: tool.name,
|
|
123
|
+
description: tool.description,
|
|
124
|
+
inputSchema: zodToJsonSchema(tool.inputSchema)
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.ToolRegistry = ToolRegistry;
|
|
129
|
+
/**
|
|
130
|
+
* Convert Zod schema to JSON Schema for MCP
|
|
131
|
+
*/
|
|
132
|
+
function zodToJsonSchema(schema) {
|
|
133
|
+
// Basic implementation - in production, use zod-to-json-schema library
|
|
134
|
+
if (schema instanceof zod_1.z.ZodObject) {
|
|
135
|
+
const shape = schema.shape;
|
|
136
|
+
const properties = {};
|
|
137
|
+
const required = [];
|
|
138
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
139
|
+
const zodValue = value;
|
|
140
|
+
properties[key] = zodToJsonSchema(zodValue);
|
|
141
|
+
// Check if required (not optional)
|
|
142
|
+
if (!(zodValue instanceof zod_1.z.ZodOptional) && !(zodValue instanceof zod_1.z.ZodDefault)) {
|
|
143
|
+
required.push(key);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
type: 'object',
|
|
148
|
+
properties,
|
|
149
|
+
required: required.length > 0 ? required : undefined
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (schema instanceof zod_1.z.ZodString) {
|
|
153
|
+
return { type: 'string', description: schema.description };
|
|
154
|
+
}
|
|
155
|
+
if (schema instanceof zod_1.z.ZodNumber) {
|
|
156
|
+
return { type: 'number', description: schema.description };
|
|
157
|
+
}
|
|
158
|
+
if (schema instanceof zod_1.z.ZodBoolean) {
|
|
159
|
+
return { type: 'boolean', description: schema.description };
|
|
160
|
+
}
|
|
161
|
+
if (schema instanceof zod_1.z.ZodOptional) {
|
|
162
|
+
return zodToJsonSchema(schema.unwrap());
|
|
163
|
+
}
|
|
164
|
+
if (schema instanceof zod_1.z.ZodDefault) {
|
|
165
|
+
const inner = zodToJsonSchema(schema.removeDefault());
|
|
166
|
+
return { ...inner, default: schema._def.defaultValue() };
|
|
167
|
+
}
|
|
168
|
+
if (schema instanceof zod_1.z.ZodArray) {
|
|
169
|
+
return {
|
|
170
|
+
type: 'array',
|
|
171
|
+
items: zodToJsonSchema(schema.element)
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
if (schema instanceof zod_1.z.ZodEnum) {
|
|
175
|
+
return {
|
|
176
|
+
type: 'string',
|
|
177
|
+
enum: schema.options
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return { type: 'string' };
|
|
181
|
+
}
|
|
182
|
+
// Global tool registry
|
|
183
|
+
exports.toolRegistry = new ToolRegistry();
|
|
184
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/tools/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel Tools
|
|
3
|
+
* Tools for listing and searching channels
|
|
4
|
+
*/
|
|
5
|
+
export declare const listChannelsTool: import("./base.js").ToolDefinition<{
|
|
6
|
+
offset?: number | undefined;
|
|
7
|
+
type?: "all" | "joined" | undefined;
|
|
8
|
+
limit?: number | undefined;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const searchChannelsTool: import("./base.js").ToolDefinition<{
|
|
11
|
+
query: string;
|
|
12
|
+
limit?: number | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const getChannelInfoTool: import("./base.js").ToolDefinition<{
|
|
15
|
+
roomId?: string | undefined;
|
|
16
|
+
roomName?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=channel-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-tools.d.ts","sourceRoot":"","sources":["../../src/tools/channel-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6BH,eAAO,MAAM,gBAAgB;;;;EAoD5B,CAAC;AAaF,eAAO,MAAM,kBAAkB;;;EAgC9B,CAAC;AAaF,eAAO,MAAM,kBAAkB;;;EA6C9B,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Channel Tools
|
|
4
|
+
* Tools for listing and searching channels
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getChannelInfoTool = exports.searchChannelsTool = exports.listChannelsTool = void 0;
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
|
+
const client_js_1 = require("../api/client.js");
|
|
10
|
+
const message_formatter_js_1 = require("../formatters/message-formatter.js");
|
|
11
|
+
const response_builder_js_1 = require("../formatters/response-builder.js");
|
|
12
|
+
const token_counter_js_1 = require("../utils/token-counter.js");
|
|
13
|
+
const base_js_1 = require("./base.js");
|
|
14
|
+
/**
|
|
15
|
+
* rocketchat_list_channels
|
|
16
|
+
* List all accessible channels with pagination
|
|
17
|
+
*/
|
|
18
|
+
const listChannelsSchema = zod_1.z.object({
|
|
19
|
+
limit: zod_1.z.number().min(1).max(100).default(50).optional()
|
|
20
|
+
.describe('Maximum number of channels to return (1-100, default: 50)'),
|
|
21
|
+
offset: zod_1.z.number().min(0).default(0).optional()
|
|
22
|
+
.describe('Number of channels to skip for pagination'),
|
|
23
|
+
type: zod_1.z.enum(['all', 'joined']).default('joined').optional()
|
|
24
|
+
.describe('Filter: "all" for all public channels, "joined" for only joined channels')
|
|
25
|
+
});
|
|
26
|
+
exports.listChannelsTool = (0, base_js_1.defineTool)('rocketchat_list_channels', `List all accessible Rocket.Chat channels.
|
|
27
|
+
|
|
28
|
+
**START HERE** - Use this tool first to discover available channels and get their IDs.
|
|
29
|
+
|
|
30
|
+
Returns channel information including:
|
|
31
|
+
- Channel ID and name (use ID for other API calls)
|
|
32
|
+
- Type (public/private/direct)
|
|
33
|
+
- Member count and message count
|
|
34
|
+
- Topic and description
|
|
35
|
+
- Last activity timestamp
|
|
36
|
+
|
|
37
|
+
**Typical Workflow:**
|
|
38
|
+
1. rocketchat_list_channels → Get channel IDs
|
|
39
|
+
2. rocketchat_get_messages or rocketchat_list_threads → Read content
|
|
40
|
+
3. rocketchat_search_messages or rocketchat_search_threads → Find specific content
|
|
41
|
+
|
|
42
|
+
**Performance Tips:**
|
|
43
|
+
- Default "joined" type is faster than "all"
|
|
44
|
+
- Use pagination (offset) for large channel lists
|
|
45
|
+
|
|
46
|
+
**No special requirements** - Works without OpenSearch.
|
|
47
|
+
|
|
48
|
+
Examples:
|
|
49
|
+
- List joined channels: {}
|
|
50
|
+
- List all public channels: { "type": "all" }
|
|
51
|
+
- Paginate results: { "limit": 20, "offset": 40 }`, listChannelsSchema, async (params) => {
|
|
52
|
+
try {
|
|
53
|
+
const client = (0, client_js_1.getClient)();
|
|
54
|
+
const limit = params.limit || 50;
|
|
55
|
+
const offset = params.offset || 0;
|
|
56
|
+
const response = params.type === 'all'
|
|
57
|
+
? await client.listChannels({ count: limit, offset })
|
|
58
|
+
: await client.listJoinedChannels({ count: limit, offset });
|
|
59
|
+
if (!response.success) {
|
|
60
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.API_ERROR, 'Failed to list channels');
|
|
61
|
+
}
|
|
62
|
+
const formatted = (0, message_formatter_js_1.formatChannels)(response.channels);
|
|
63
|
+
const { items, truncated } = token_counter_js_1.TokenCounter.truncateToFit(formatted);
|
|
64
|
+
const result = (0, response_builder_js_1.buildPaginatedResponse)(items, response.total, offset, truncated);
|
|
65
|
+
return (0, base_js_1.createToolResult)(result);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to list channels', error);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* rocketchat_search_channels
|
|
73
|
+
* Search channels by name or topic
|
|
74
|
+
*/
|
|
75
|
+
const searchChannelsSchema = zod_1.z.object({
|
|
76
|
+
query: zod_1.z.string().min(1)
|
|
77
|
+
.describe('Search query to match against channel names and topics'),
|
|
78
|
+
limit: zod_1.z.number().min(1).max(50).default(20).optional()
|
|
79
|
+
.describe('Maximum number of results (1-50, default: 20)')
|
|
80
|
+
});
|
|
81
|
+
exports.searchChannelsTool = (0, base_js_1.defineTool)('rocketchat_search_channels', `Search for Rocket.Chat channels by name or topic.
|
|
82
|
+
|
|
83
|
+
Use this to find specific channels when you know part of the name.
|
|
84
|
+
|
|
85
|
+
Examples:
|
|
86
|
+
- Find project channels: { "query": "project" }
|
|
87
|
+
- Find channels by topic: { "query": "support" }`, searchChannelsSchema, async (params) => {
|
|
88
|
+
try {
|
|
89
|
+
const client = (0, client_js_1.getClient)();
|
|
90
|
+
const response = await client.searchChannels(params.query);
|
|
91
|
+
if (!response.success) {
|
|
92
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.API_ERROR, 'Failed to search channels');
|
|
93
|
+
}
|
|
94
|
+
const formatted = (0, message_formatter_js_1.formatChannels)(response.channels);
|
|
95
|
+
const limited = formatted.slice(0, params.limit || 20);
|
|
96
|
+
const result = (0, response_builder_js_1.buildSuccessResponse)(limited, {
|
|
97
|
+
count: limited.length,
|
|
98
|
+
total: response.channels.length
|
|
99
|
+
});
|
|
100
|
+
return (0, base_js_1.createToolResult)(result);
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to search channels', error);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
/**
|
|
107
|
+
* rocketchat_get_channel_info
|
|
108
|
+
* Get detailed information about a specific channel
|
|
109
|
+
*/
|
|
110
|
+
const getChannelInfoSchema = zod_1.z.object({
|
|
111
|
+
roomId: zod_1.z.string().optional()
|
|
112
|
+
.describe('Channel ID (provide either roomId or roomName)'),
|
|
113
|
+
roomName: zod_1.z.string().optional()
|
|
114
|
+
.describe('Channel name (provide either roomId or roomName)')
|
|
115
|
+
});
|
|
116
|
+
exports.getChannelInfoTool = (0, base_js_1.defineTool)('rocketchat_get_channel_info', `Get detailed information about a specific Rocket.Chat channel.
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
- Channel ID, name, and display name
|
|
120
|
+
- Type (public/private/direct/livechat)
|
|
121
|
+
- Member and message counts
|
|
122
|
+
- Topic, description, and announcement
|
|
123
|
+
- Read-only status
|
|
124
|
+
- Last activity timestamp
|
|
125
|
+
|
|
126
|
+
Examples:
|
|
127
|
+
- By ID: { "roomId": "GENERAL" }
|
|
128
|
+
- By name: { "roomName": "general" }`, getChannelInfoSchema, async (params) => {
|
|
129
|
+
if (!params.roomId && !params.roomName) {
|
|
130
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.VALIDATION_ERROR, 'Missing room identifier', 'Either roomId or roomName must be provided');
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const client = (0, client_js_1.getClient)();
|
|
134
|
+
const response = await client.getChannelInfo(params.roomId, params.roomName);
|
|
135
|
+
if (!response.success) {
|
|
136
|
+
const identifier = params.roomId || params.roomName || '';
|
|
137
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.NOT_FOUND, 'Channel not found', `No channel found with identifier "${identifier}"`);
|
|
138
|
+
}
|
|
139
|
+
const formatted = (0, message_formatter_js_1.formatChannels)([response.channel])[0];
|
|
140
|
+
const result = (0, response_builder_js_1.buildSuccessResponse)(formatted);
|
|
141
|
+
return (0, base_js_1.createToolResult)(result);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
return (0, base_js_1.createErrorResultFromException)(base_js_1.ErrorCodes.API_ERROR, 'Failed to get channel info', error);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
// Register tools
|
|
148
|
+
base_js_1.toolRegistry.register(exports.listChannelsTool);
|
|
149
|
+
base_js_1.toolRegistry.register(exports.searchChannelsTool);
|
|
150
|
+
base_js_1.toolRegistry.register(exports.getChannelInfoTool);
|
|
151
|
+
//# sourceMappingURL=channel-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-tools.js","sourceRoot":"","sources":["../../src/tools/channel-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler Utilities
|
|
3
|
+
* Common patterns and utilities for tool handlers to reduce code duplication
|
|
4
|
+
*/
|
|
5
|
+
import { ToolResult } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Common pagination parameters
|
|
8
|
+
*/
|
|
9
|
+
export interface PaginationParams {
|
|
10
|
+
limit?: number;
|
|
11
|
+
offset?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Default pagination values
|
|
15
|
+
*/
|
|
16
|
+
export declare const DEFAULT_PAGINATION: {
|
|
17
|
+
readonly limit: 50;
|
|
18
|
+
readonly offset: 0;
|
|
19
|
+
readonly maxLimit: 100;
|
|
20
|
+
readonly minLimit: 1;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Extract pagination values with defaults
|
|
24
|
+
*/
|
|
25
|
+
export declare function extractPagination(params: PaginationParams): {
|
|
26
|
+
limit: number;
|
|
27
|
+
offset: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Process a paginated list response with token truncation
|
|
31
|
+
*/
|
|
32
|
+
export declare function processPaginatedResponse<T>(items: T[], total: number, offset: number): ToolResult;
|
|
33
|
+
/**
|
|
34
|
+
* Process a single item response
|
|
35
|
+
*/
|
|
36
|
+
export declare function processSingleResponse<T>(item: T): ToolResult;
|
|
37
|
+
/**
|
|
38
|
+
* Process a success response with metadata
|
|
39
|
+
*/
|
|
40
|
+
export declare function processSuccessResponse<T>(data: T, metadata?: {
|
|
41
|
+
count?: number;
|
|
42
|
+
total?: number;
|
|
43
|
+
truncated?: boolean;
|
|
44
|
+
}): ToolResult;
|
|
45
|
+
/**
|
|
46
|
+
* Create not found error for common resources
|
|
47
|
+
*/
|
|
48
|
+
export declare function createNotFoundError(resource: string, identifier: string): ToolResult;
|
|
49
|
+
/**
|
|
50
|
+
* Create validation error for missing required parameters
|
|
51
|
+
*/
|
|
52
|
+
export declare function createValidationError(requirement: string, details?: string): ToolResult;
|
|
53
|
+
/**
|
|
54
|
+
* Helper to require at least one of multiple optional parameters
|
|
55
|
+
*/
|
|
56
|
+
export declare function requireOneOf(params: Record<string, unknown>, keys: string[]): {
|
|
57
|
+
valid: boolean;
|
|
58
|
+
error?: ToolResult;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Format items with truncation and return result
|
|
62
|
+
*/
|
|
63
|
+
export declare function formatAndTruncate<T, R>(items: T[], formatter: (items: T[]) => R[], total: number, offset: number): ToolResult;
|
|
64
|
+
/**
|
|
65
|
+
* Check API response success and handle error
|
|
66
|
+
*/
|
|
67
|
+
export declare function checkApiSuccess(response: {
|
|
68
|
+
success: boolean;
|
|
69
|
+
}, errorMessage: string): {
|
|
70
|
+
ok: true;
|
|
71
|
+
} | {
|
|
72
|
+
ok: false;
|
|
73
|
+
error: ToolResult;
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=handler-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-utils.d.ts","sourceRoot":"","sources":["../../src/tools/handler-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAmD,UAAU,EAAE,MAAM,WAAW,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQ7F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACf,UAAU,CAIZ;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,CAG5D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACpC,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACnE,UAAU,CAGZ;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAMpF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAMvF;AAED;;GAEG;AACH,wBAAgB,YAAY,CACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,MAAM,EAAE,GACf;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAAE,CAexC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAClC,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACf,UAAU,CAGZ;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,EAC9B,YAAY,EAAE,MAAM,GACrB;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAQjD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Handler Utilities
|
|
4
|
+
* Common patterns and utilities for tool handlers to reduce code duplication
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DEFAULT_PAGINATION = void 0;
|
|
8
|
+
exports.extractPagination = extractPagination;
|
|
9
|
+
exports.processPaginatedResponse = processPaginatedResponse;
|
|
10
|
+
exports.processSingleResponse = processSingleResponse;
|
|
11
|
+
exports.processSuccessResponse = processSuccessResponse;
|
|
12
|
+
exports.createNotFoundError = createNotFoundError;
|
|
13
|
+
exports.createValidationError = createValidationError;
|
|
14
|
+
exports.requireOneOf = requireOneOf;
|
|
15
|
+
exports.formatAndTruncate = formatAndTruncate;
|
|
16
|
+
exports.checkApiSuccess = checkApiSuccess;
|
|
17
|
+
const token_counter_js_1 = require("../utils/token-counter.js");
|
|
18
|
+
const response_builder_js_1 = require("../formatters/response-builder.js");
|
|
19
|
+
const base_js_1 = require("./base.js");
|
|
20
|
+
/**
|
|
21
|
+
* Default pagination values
|
|
22
|
+
*/
|
|
23
|
+
exports.DEFAULT_PAGINATION = {
|
|
24
|
+
limit: 50,
|
|
25
|
+
offset: 0,
|
|
26
|
+
maxLimit: 100,
|
|
27
|
+
minLimit: 1
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Extract pagination values with defaults
|
|
31
|
+
*/
|
|
32
|
+
function extractPagination(params) {
|
|
33
|
+
return {
|
|
34
|
+
limit: Math.min(Math.max(params.limit || exports.DEFAULT_PAGINATION.limit, exports.DEFAULT_PAGINATION.minLimit), exports.DEFAULT_PAGINATION.maxLimit),
|
|
35
|
+
offset: Math.max(params.offset || exports.DEFAULT_PAGINATION.offset, 0)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Process a paginated list response with token truncation
|
|
40
|
+
*/
|
|
41
|
+
function processPaginatedResponse(items, total, offset) {
|
|
42
|
+
const { items: truncatedItems, truncated } = token_counter_js_1.TokenCounter.truncateToFit(items);
|
|
43
|
+
const result = (0, response_builder_js_1.buildPaginatedResponse)(truncatedItems, total, offset, truncated);
|
|
44
|
+
return (0, base_js_1.createToolResult)(result);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Process a single item response
|
|
48
|
+
*/
|
|
49
|
+
function processSingleResponse(item) {
|
|
50
|
+
const result = (0, response_builder_js_1.buildSuccessResponse)(item);
|
|
51
|
+
return (0, base_js_1.createToolResult)(result);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Process a success response with metadata
|
|
55
|
+
*/
|
|
56
|
+
function processSuccessResponse(data, metadata) {
|
|
57
|
+
const result = (0, response_builder_js_1.buildSuccessResponse)(data, metadata);
|
|
58
|
+
return (0, base_js_1.createToolResult)(result);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create not found error for common resources
|
|
62
|
+
*/
|
|
63
|
+
function createNotFoundError(resource, identifier) {
|
|
64
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.NOT_FOUND, `${resource} not found`, `No ${resource} found with identifier "${identifier}"`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create validation error for missing required parameters
|
|
68
|
+
*/
|
|
69
|
+
function createValidationError(requirement, details) {
|
|
70
|
+
return (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.VALIDATION_ERROR, requirement, details);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Helper to require at least one of multiple optional parameters
|
|
74
|
+
*/
|
|
75
|
+
function requireOneOf(params, keys) {
|
|
76
|
+
const hasValue = keys.some(key => params[key] !== undefined && params[key] !== null && params[key] !== '');
|
|
77
|
+
if (!hasValue) {
|
|
78
|
+
const keysStr = keys.join(' or ');
|
|
79
|
+
return {
|
|
80
|
+
valid: false,
|
|
81
|
+
error: createValidationError(`Missing required parameter`, `Either ${keysStr} must be provided`)
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return { valid: true };
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Format items with truncation and return result
|
|
88
|
+
*/
|
|
89
|
+
function formatAndTruncate(items, formatter, total, offset) {
|
|
90
|
+
const formatted = formatter(items);
|
|
91
|
+
return processPaginatedResponse(formatted, total, offset);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check API response success and handle error
|
|
95
|
+
*/
|
|
96
|
+
function checkApiSuccess(response, errorMessage) {
|
|
97
|
+
if (!response.success) {
|
|
98
|
+
return {
|
|
99
|
+
ok: false,
|
|
100
|
+
error: (0, base_js_1.createErrorResult)(base_js_1.ErrorCodes.API_ERROR, errorMessage)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return { ok: true };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=handler-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-utils.js","sourceRoot":"","sources":["../../src/tools/handler-utils.ts"],"names":[],"mappings":"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"}
|