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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +332 -0
  3. package/dist/api/client.d.ts +119 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +305 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/index.d.ts +6 -0
  8. package/dist/api/index.d.ts.map +1 -0
  9. package/dist/api/index.js +22 -0
  10. package/dist/api/index.js.map +1 -0
  11. package/dist/api/schemas.d.ts +10636 -0
  12. package/dist/api/schemas.d.ts.map +1 -0
  13. package/dist/api/schemas.js +267 -0
  14. package/dist/api/schemas.js.map +1 -0
  15. package/dist/api/types.d.ts +263 -0
  16. package/dist/api/types.d.ts.map +1 -0
  17. package/dist/api/types.js +7 -0
  18. package/dist/api/types.js.map +1 -0
  19. package/dist/config/config.d.ts +37 -0
  20. package/dist/config/config.d.ts.map +1 -0
  21. package/dist/config/config.js +79 -0
  22. package/dist/config/config.js.map +1 -0
  23. package/dist/config/index.d.ts +5 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/config/index.js +21 -0
  26. package/dist/config/index.js.map +1 -0
  27. package/dist/di/container.d.ts +101 -0
  28. package/dist/di/container.d.ts.map +1 -0
  29. package/dist/di/container.js +214 -0
  30. package/dist/di/container.js.map +1 -0
  31. package/dist/di/index.d.ts +6 -0
  32. package/dist/di/index.d.ts.map +1 -0
  33. package/dist/di/index.js +12 -0
  34. package/dist/di/index.js.map +1 -0
  35. package/dist/formatters/index.d.ts +6 -0
  36. package/dist/formatters/index.d.ts.map +1 -0
  37. package/dist/formatters/index.js +22 -0
  38. package/dist/formatters/index.js.map +1 -0
  39. package/dist/formatters/message-formatter.d.ts +64 -0
  40. package/dist/formatters/message-formatter.d.ts.map +1 -0
  41. package/dist/formatters/message-formatter.js +161 -0
  42. package/dist/formatters/message-formatter.js.map +1 -0
  43. package/dist/formatters/response-builder.d.ts +60 -0
  44. package/dist/formatters/response-builder.d.ts.map +1 -0
  45. package/dist/formatters/response-builder.js +108 -0
  46. package/dist/formatters/response-builder.js.map +1 -0
  47. package/dist/guards/index.d.ts +12 -0
  48. package/dist/guards/index.d.ts.map +1 -0
  49. package/dist/guards/index.js +42 -0
  50. package/dist/guards/index.js.map +1 -0
  51. package/dist/guards/input-validator.d.ts +89 -0
  52. package/dist/guards/input-validator.d.ts.map +1 -0
  53. package/dist/guards/input-validator.js +266 -0
  54. package/dist/guards/input-validator.js.map +1 -0
  55. package/dist/guards/rate-limiter.d.ts +115 -0
  56. package/dist/guards/rate-limiter.d.ts.map +1 -0
  57. package/dist/guards/rate-limiter.js +226 -0
  58. package/dist/guards/rate-limiter.js.map +1 -0
  59. package/dist/guards/sanitizer.d.ts +35 -0
  60. package/dist/guards/sanitizer.d.ts.map +1 -0
  61. package/dist/guards/sanitizer.js +111 -0
  62. package/dist/guards/sanitizer.js.map +1 -0
  63. package/dist/guards/write-guard.d.ts +33 -0
  64. package/dist/guards/write-guard.d.ts.map +1 -0
  65. package/dist/guards/write-guard.js +90 -0
  66. package/dist/guards/write-guard.js.map +1 -0
  67. package/dist/http-server.d.ts +9 -0
  68. package/dist/http-server.d.ts.map +1 -0
  69. package/dist/http-server.js +190 -0
  70. package/dist/http-server.js.map +1 -0
  71. package/dist/index.d.ts +14 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +114 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/tools/base.d.ts +85 -0
  76. package/dist/tools/base.d.ts.map +1 -0
  77. package/dist/tools/base.js +184 -0
  78. package/dist/tools/base.js.map +1 -0
  79. package/dist/tools/channel-tools.d.ts +18 -0
  80. package/dist/tools/channel-tools.d.ts.map +1 -0
  81. package/dist/tools/channel-tools.js +151 -0
  82. package/dist/tools/channel-tools.js.map +1 -0
  83. package/dist/tools/handler-utils.d.ts +75 -0
  84. package/dist/tools/handler-utils.d.ts.map +1 -0
  85. package/dist/tools/handler-utils.js +105 -0
  86. package/dist/tools/handler-utils.js.map +1 -0
  87. package/dist/tools/index.d.ts +17 -0
  88. package/dist/tools/index.d.ts.map +1 -0
  89. package/dist/tools/index.js +40 -0
  90. package/dist/tools/index.js.map +1 -0
  91. package/dist/tools/message-tools.d.ts +20 -0
  92. package/dist/tools/message-tools.d.ts.map +1 -0
  93. package/dist/tools/message-tools.js +194 -0
  94. package/dist/tools/message-tools.js.map +1 -0
  95. package/dist/tools/thread-tools.d.ts +23 -0
  96. package/dist/tools/thread-tools.d.ts.map +1 -0
  97. package/dist/tools/thread-tools.js +243 -0
  98. package/dist/tools/thread-tools.js.map +1 -0
  99. package/dist/tools/user-tools.d.ts +14 -0
  100. package/dist/tools/user-tools.d.ts.map +1 -0
  101. package/dist/tools/user-tools.js +120 -0
  102. package/dist/tools/user-tools.js.map +1 -0
  103. package/dist/tools/write-tools.d.ts +15 -0
  104. package/dist/tools/write-tools.d.ts.map +1 -0
  105. package/dist/tools/write-tools.js +181 -0
  106. package/dist/tools/write-tools.js.map +1 -0
  107. package/dist/utils/cache.d.ts +47 -0
  108. package/dist/utils/cache.d.ts.map +1 -0
  109. package/dist/utils/cache.js +116 -0
  110. package/dist/utils/cache.js.map +1 -0
  111. package/dist/utils/error-handler.d.ts +64 -0
  112. package/dist/utils/error-handler.d.ts.map +1 -0
  113. package/dist/utils/error-handler.js +148 -0
  114. package/dist/utils/error-handler.js.map +1 -0
  115. package/dist/utils/index.d.ts +12 -0
  116. package/dist/utils/index.d.ts.map +1 -0
  117. package/dist/utils/index.js +33 -0
  118. package/dist/utils/index.js.map +1 -0
  119. package/dist/utils/logger.d.ts +50 -0
  120. package/dist/utils/logger.d.ts.map +1 -0
  121. package/dist/utils/logger.js +118 -0
  122. package/dist/utils/logger.js.map +1 -0
  123. package/dist/utils/time-parser.d.ts +37 -0
  124. package/dist/utils/time-parser.d.ts.map +1 -0
  125. package/dist/utils/time-parser.js +98 -0
  126. package/dist/utils/time-parser.js.map +1 -0
  127. package/dist/utils/token-counter.d.ts +42 -0
  128. package/dist/utils/token-counter.d.ts.map +1 -0
  129. package/dist/utils/token-counter.js +81 -0
  130. package/dist/utils/token-counter.js.map +1 -0
  131. package/package.json +68 -0
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration management for Rocket.Chat MCP
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.config = void 0;
7
+ exports.loadConfig = loadConfig;
8
+ function parseWriteConfig() {
9
+ const enabled = process.env.ROCKETCHAT_WRITE_ENABLED || '';
10
+ const rooms = process.env.ROCKETCHAT_WRITE_ROOMS || '';
11
+ if (!enabled || enabled === 'false' || enabled === '0') {
12
+ return {
13
+ enabled: false,
14
+ mode: 'whitelist',
15
+ rooms: [],
16
+ whitelist: [],
17
+ blacklist: []
18
+ };
19
+ }
20
+ if (enabled === 'true' || enabled === '1') {
21
+ if (!rooms) {
22
+ return {
23
+ enabled: true,
24
+ mode: 'all',
25
+ rooms: [],
26
+ whitelist: [],
27
+ blacklist: []
28
+ };
29
+ }
30
+ const roomList = rooms.split(',').map(r => r.trim()).filter(Boolean);
31
+ const isBlacklist = roomList[0]?.startsWith('!');
32
+ const cleanedRooms = roomList.map(r => r.replace(/^!/, ''));
33
+ return {
34
+ enabled: true,
35
+ mode: isBlacklist ? 'blacklist' : 'whitelist',
36
+ rooms: cleanedRooms,
37
+ whitelist: isBlacklist ? [] : cleanedRooms,
38
+ blacklist: isBlacklist ? cleanedRooms : []
39
+ };
40
+ }
41
+ return {
42
+ enabled: false,
43
+ mode: 'whitelist',
44
+ rooms: [],
45
+ whitelist: [],
46
+ blacklist: []
47
+ };
48
+ }
49
+ function loadConfig() {
50
+ const url = process.env.ROCKETCHAT_URL;
51
+ const authToken = process.env.ROCKETCHAT_AUTH_TOKEN;
52
+ const userId = process.env.ROCKETCHAT_USER_ID;
53
+ if (!url || !authToken || !userId) {
54
+ throw new Error('Missing required environment variables: ROCKETCHAT_URL, ROCKETCHAT_AUTH_TOKEN, ROCKETCHAT_USER_ID');
55
+ }
56
+ return {
57
+ rocketchat: {
58
+ url: url.replace(/\/$/, ''), // Remove trailing slash
59
+ authToken,
60
+ userId
61
+ },
62
+ write: parseWriteConfig(),
63
+ safety: {
64
+ blockMentions: process.env.ROCKETCHAT_BLOCK_MENTIONS !== 'false',
65
+ maxMessageLength: parseInt(process.env.ROCKETCHAT_MAX_MESSAGE_LENGTH || '4000', 10),
66
+ dangerousMentions: ['@all', '@here', '@channel', '@everyone'],
67
+ blockedMentions: ['@all', '@here', '@channel', '@everyone']
68
+ },
69
+ cache: {
70
+ channelsTtl: parseInt(process.env.ROCKETCHAT_CACHE_TTL_CHANNELS || '300000', 10),
71
+ usersTtl: parseInt(process.env.ROCKETCHAT_CACHE_TTL_USERS || '1800000', 10),
72
+ maxSize: 500,
73
+ ttl: parseInt(process.env.ROCKETCHAT_CACHE_TTL || '300000', 10)
74
+ },
75
+ debug: process.env.DEBUG === 'true'
76
+ };
77
+ }
78
+ exports.config = loadConfig();
79
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Config module exports
3
+ */
4
+ export * from './config.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Config module exports
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./config.js"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,8CAA4B"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Dependency Injection Container
3
+ * Provides centralized management of singleton instances with support for testing
4
+ */
5
+ import { RocketChatClient } from '../api/client.js';
6
+ import { WriteGuard } from '../guards/write-guard.js';
7
+ import { MessageSanitizer } from '../guards/sanitizer.js';
8
+ import { LRUCache } from '../utils/cache.js';
9
+ import { Config } from '../config/config.js';
10
+ /**
11
+ * Dependencies interface - all injectable services
12
+ */
13
+ export interface Dependencies {
14
+ config: Config;
15
+ client: RocketChatClient;
16
+ writeGuard: WriteGuard;
17
+ sanitizer: MessageSanitizer;
18
+ cache: LRUCache<unknown>;
19
+ }
20
+ /**
21
+ * Container options for customizing behavior
22
+ */
23
+ export interface ContainerOptions {
24
+ /** Custom config to use instead of environment-based config */
25
+ config?: Partial<Config>;
26
+ /** Custom client instance */
27
+ client?: RocketChatClient;
28
+ /** Custom write guard instance */
29
+ writeGuard?: WriteGuard;
30
+ /** Custom sanitizer instance */
31
+ sanitizer?: MessageSanitizer;
32
+ /** Custom cache instance */
33
+ cache?: LRUCache<unknown>;
34
+ }
35
+ /**
36
+ * Dependency Injection Container
37
+ * Manages singleton instances and allows for dependency overrides in tests
38
+ */
39
+ export declare class Container {
40
+ private static instance;
41
+ private _config;
42
+ private _client;
43
+ private _writeGuard;
44
+ private _sanitizer;
45
+ private _cache;
46
+ private options;
47
+ private constructor();
48
+ /**
49
+ * Get the singleton container instance
50
+ */
51
+ static getInstance(options?: ContainerOptions): Container;
52
+ /**
53
+ * Reset the container (useful for testing)
54
+ */
55
+ static reset(): void;
56
+ /**
57
+ * Create a new container with custom options (useful for testing)
58
+ */
59
+ static createTestContainer(options: ContainerOptions): Container;
60
+ /**
61
+ * Get the configuration
62
+ */
63
+ get config(): Config;
64
+ /**
65
+ * Safely load config with fallback for testing
66
+ */
67
+ private safeLoadConfig;
68
+ /**
69
+ * Get the RocketChat client
70
+ */
71
+ get client(): RocketChatClient;
72
+ /**
73
+ * Get the write guard
74
+ */
75
+ get writeGuard(): WriteGuard;
76
+ /**
77
+ * Get the sanitizer
78
+ */
79
+ get sanitizer(): MessageSanitizer;
80
+ /**
81
+ * Get the cache
82
+ */
83
+ get cache(): LRUCache<unknown>;
84
+ /**
85
+ * Get all dependencies as an object
86
+ */
87
+ getDependencies(): Dependencies;
88
+ }
89
+ /**
90
+ * Convenience function to get the container
91
+ */
92
+ export declare function getContainer(): Container;
93
+ /**
94
+ * Convenience function to get all dependencies
95
+ */
96
+ export declare function getDependencies(): Dependencies;
97
+ /**
98
+ * Reset the container (for testing)
99
+ */
100
+ export declare function resetContainer(): void;
101
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAc,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,kCAAkC;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gCAAgC;IAChC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC7B;AAED;;;GAGG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0B;IACjD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,OAAO,CAAmB;IAElC,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS;IAOzD;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS;IAIhE;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CA8BnB;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;IACH,IAAI,MAAM,IAAI,gBAAgB,CAS7B;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,UAAU,CAS3B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,gBAAgB,CAShC;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,CAU7B;IAED;;OAEG;IACH,eAAe,IAAI,YAAY;CASlC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ /**
3
+ * Dependency Injection Container
4
+ * Provides centralized management of singleton instances with support for testing
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Container = void 0;
8
+ exports.getContainer = getContainer;
9
+ exports.getDependencies = getDependencies;
10
+ exports.resetContainer = resetContainer;
11
+ const client_js_1 = require("../api/client.js");
12
+ const write_guard_js_1 = require("../guards/write-guard.js");
13
+ const sanitizer_js_1 = require("../guards/sanitizer.js");
14
+ const cache_js_1 = require("../utils/cache.js");
15
+ const config_js_1 = require("../config/config.js");
16
+ /**
17
+ * Dependency Injection Container
18
+ * Manages singleton instances and allows for dependency overrides in tests
19
+ */
20
+ class Container {
21
+ static instance = null;
22
+ _config = null;
23
+ _client = null;
24
+ _writeGuard = null;
25
+ _sanitizer = null;
26
+ _cache = null;
27
+ options;
28
+ constructor(options = {}) {
29
+ this.options = options;
30
+ }
31
+ /**
32
+ * Get the singleton container instance
33
+ */
34
+ static getInstance(options) {
35
+ if (!Container.instance) {
36
+ Container.instance = new Container(options);
37
+ }
38
+ return Container.instance;
39
+ }
40
+ /**
41
+ * Reset the container (useful for testing)
42
+ */
43
+ static reset() {
44
+ Container.instance = null;
45
+ }
46
+ /**
47
+ * Create a new container with custom options (useful for testing)
48
+ */
49
+ static createTestContainer(options) {
50
+ return new Container(options);
51
+ }
52
+ /**
53
+ * Get the configuration
54
+ */
55
+ get config() {
56
+ if (!this._config) {
57
+ if (this.options.config) {
58
+ // Merge with defaults
59
+ const baseConfig = this.safeLoadConfig();
60
+ this._config = {
61
+ ...baseConfig,
62
+ ...this.options.config,
63
+ rocketchat: {
64
+ ...baseConfig.rocketchat,
65
+ ...this.options.config.rocketchat
66
+ },
67
+ write: {
68
+ ...baseConfig.write,
69
+ ...this.options.config.write
70
+ },
71
+ safety: {
72
+ ...baseConfig.safety,
73
+ ...this.options.config.safety
74
+ },
75
+ cache: {
76
+ ...baseConfig.cache,
77
+ ...this.options.config.cache
78
+ }
79
+ };
80
+ }
81
+ else {
82
+ this._config = (0, config_js_1.loadConfig)();
83
+ }
84
+ }
85
+ return this._config;
86
+ }
87
+ /**
88
+ * Safely load config with fallback for testing
89
+ */
90
+ safeLoadConfig() {
91
+ try {
92
+ return (0, config_js_1.loadConfig)();
93
+ }
94
+ catch {
95
+ // Return minimal config for testing
96
+ return {
97
+ rocketchat: {
98
+ url: 'http://localhost:3000',
99
+ authToken: 'test-token',
100
+ userId: 'test-user'
101
+ },
102
+ write: {
103
+ enabled: false,
104
+ mode: 'whitelist',
105
+ rooms: [],
106
+ whitelist: [],
107
+ blacklist: []
108
+ },
109
+ safety: {
110
+ blockMentions: true,
111
+ maxMessageLength: 4000,
112
+ dangerousMentions: ['@all', '@here', '@channel', '@everyone'],
113
+ blockedMentions: ['@all', '@here', '@channel', '@everyone']
114
+ },
115
+ cache: {
116
+ channelsTtl: 300000,
117
+ usersTtl: 1800000,
118
+ maxSize: 500,
119
+ ttl: 300000
120
+ },
121
+ debug: false
122
+ };
123
+ }
124
+ }
125
+ /**
126
+ * Get the RocketChat client
127
+ */
128
+ get client() {
129
+ if (!this._client) {
130
+ if (this.options.client) {
131
+ this._client = this.options.client;
132
+ }
133
+ else {
134
+ this._client = new client_js_1.RocketChatClient(this.config.rocketchat);
135
+ }
136
+ }
137
+ return this._client;
138
+ }
139
+ /**
140
+ * Get the write guard
141
+ */
142
+ get writeGuard() {
143
+ if (!this._writeGuard) {
144
+ if (this.options.writeGuard) {
145
+ this._writeGuard = this.options.writeGuard;
146
+ }
147
+ else {
148
+ this._writeGuard = new write_guard_js_1.WriteGuard();
149
+ }
150
+ }
151
+ return this._writeGuard;
152
+ }
153
+ /**
154
+ * Get the sanitizer
155
+ */
156
+ get sanitizer() {
157
+ if (!this._sanitizer) {
158
+ if (this.options.sanitizer) {
159
+ this._sanitizer = this.options.sanitizer;
160
+ }
161
+ else {
162
+ this._sanitizer = new sanitizer_js_1.MessageSanitizer();
163
+ }
164
+ }
165
+ return this._sanitizer;
166
+ }
167
+ /**
168
+ * Get the cache
169
+ */
170
+ get cache() {
171
+ if (!this._cache) {
172
+ if (this.options.cache) {
173
+ this._cache = this.options.cache;
174
+ }
175
+ else {
176
+ const cacheConfig = this.config.cache;
177
+ this._cache = new cache_js_1.LRUCache(cacheConfig.maxSize, cacheConfig.ttl);
178
+ }
179
+ }
180
+ return this._cache;
181
+ }
182
+ /**
183
+ * Get all dependencies as an object
184
+ */
185
+ getDependencies() {
186
+ return {
187
+ config: this.config,
188
+ client: this.client,
189
+ writeGuard: this.writeGuard,
190
+ sanitizer: this.sanitizer,
191
+ cache: this.cache
192
+ };
193
+ }
194
+ }
195
+ exports.Container = Container;
196
+ /**
197
+ * Convenience function to get the container
198
+ */
199
+ function getContainer() {
200
+ return Container.getInstance();
201
+ }
202
+ /**
203
+ * Convenience function to get all dependencies
204
+ */
205
+ function getDependencies() {
206
+ return getContainer().getDependencies();
207
+ }
208
+ /**
209
+ * Reset the container (for testing)
210
+ */
211
+ function resetContainer() {
212
+ Container.reset();
213
+ }
214
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Dependency Injection module exports
3
+ */
4
+ export { Container, getContainer, getDependencies, resetContainer } from './container.js';
5
+ export type { Dependencies, ContainerOptions } from './container.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACR,YAAY,EACZ,gBAAgB,EACnB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * Dependency Injection module exports
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resetContainer = exports.getDependencies = exports.getContainer = exports.Container = void 0;
7
+ var container_js_1 = require("./container.js");
8
+ Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return container_js_1.Container; } });
9
+ Object.defineProperty(exports, "getContainer", { enumerable: true, get: function () { return container_js_1.getContainer; } });
10
+ Object.defineProperty(exports, "getDependencies", { enumerable: true, get: function () { return container_js_1.getDependencies; } });
11
+ Object.defineProperty(exports, "resetContainer", { enumerable: true, get: function () { return container_js_1.resetContainer; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+CAKwB;AAJpB,yGAAA,SAAS,OAAA;AACT,4GAAA,YAAY,OAAA;AACZ,+GAAA,eAAe,OAAA;AACf,8GAAA,cAAc,OAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Formatters module exports
3
+ */
4
+ export * from './message-formatter.js';
5
+ export * from './response-builder.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Formatters module exports
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./message-formatter.js"), exports);
21
+ __exportStar(require("./response-builder.js"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,yDAAuC;AACvC,wDAAsC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Message Formatter
3
+ * Transforms Rocket.Chat API responses into MCP-friendly formats
4
+ */
5
+ import { RocketChatMessage, RocketChatRoom, RocketChatUser, MessageInfo, ChannelInfo, ThreadInfo, UserInfo, SearchResultMessage } from '../api/types.js';
6
+ /**
7
+ * Format a single message for MCP response
8
+ * Supports both regular messages and search results with OpenSearch fields
9
+ */
10
+ export declare function formatMessage(msg: RocketChatMessage | SearchResultMessage): MessageInfo;
11
+ /**
12
+ * Format multiple messages
13
+ */
14
+ export declare function formatMessages(messages: RocketChatMessage[]): MessageInfo[];
15
+ /**
16
+ * Format a channel for MCP response
17
+ */
18
+ export declare function formatChannel(room: RocketChatRoom): ChannelInfo;
19
+ /**
20
+ * Format multiple channels
21
+ */
22
+ export declare function formatChannels(rooms: RocketChatRoom[]): ChannelInfo[];
23
+ /**
24
+ * Format a thread for MCP response
25
+ */
26
+ export declare function formatThread(msg: RocketChatMessage, roomName?: string): ThreadInfo;
27
+ /**
28
+ * Format multiple threads
29
+ */
30
+ export declare function formatThreads(messages: RocketChatMessage[], roomName?: string): ThreadInfo[];
31
+ /**
32
+ * Format a user for MCP response
33
+ */
34
+ export declare function formatUser(user: RocketChatUser): UserInfo;
35
+ /**
36
+ * Format multiple users
37
+ */
38
+ export declare function formatUsers(users: RocketChatUser[]): UserInfo[];
39
+ /**
40
+ * Format a thread with its replies for detailed view
41
+ */
42
+ export interface ThreadWithReplies {
43
+ thread: ThreadInfo;
44
+ parentMessage: MessageInfo;
45
+ replies: MessageInfo[];
46
+ totalReplies: number;
47
+ }
48
+ export declare function formatThreadWithReplies(parentMsg: RocketChatMessage, replies: RocketChatMessage[], roomName?: string): ThreadWithReplies;
49
+ /**
50
+ * Create a summary of search results
51
+ */
52
+ export interface SearchResultSummary {
53
+ query: string;
54
+ totalResults: number;
55
+ channels: number;
56
+ threads: number;
57
+ messages: number;
58
+ timeRange?: {
59
+ oldest: string;
60
+ newest: string;
61
+ };
62
+ }
63
+ export declare function createSearchSummary(query: string, messages: RocketChatMessage[], totalResults: number): SearchResultSummary;
64
+ //# sourceMappingURL=message-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-formatter.d.ts","sourceRoot":"","sources":["../../src/formatters/message-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,WAAW,EACX,WAAW,EACX,UAAU,EACV,QAAQ,EACR,mBAAmB,EACtB,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,WAAW,CAkCvF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CAE3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CAoB/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAqBlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAE5F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,QAAQ,CASzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,QAAQ,EAAE,CAE/D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,WAAW,CAAC;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CACnC,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAClB,iBAAiB,CAOnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL;AAED,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,YAAY,EAAE,MAAM,GACrB,mBAAmB,CAkBrB"}