obsidian-mcp-server 1.5.8 → 2.0.2

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 (221) hide show
  1. package/README.md +248 -104
  2. package/dist/config/index.d.ts +41 -0
  3. package/dist/config/index.js +191 -0
  4. package/dist/index.d.ts +1 -5
  5. package/dist/index.js +296 -18
  6. package/dist/mcp-server/server.d.ts +33 -0
  7. package/dist/mcp-server/server.js +211 -0
  8. package/dist/mcp-server/tools/obsidianDeleteFileTool/index.d.ts +12 -0
  9. package/dist/mcp-server/tools/obsidianDeleteFileTool/index.js +12 -0
  10. package/dist/mcp-server/tools/obsidianDeleteFileTool/logic.d.ts +51 -0
  11. package/dist/mcp-server/tools/obsidianDeleteFileTool/logic.js +168 -0
  12. package/dist/mcp-server/tools/obsidianDeleteFileTool/registration.d.ts +19 -0
  13. package/dist/mcp-server/tools/obsidianDeleteFileTool/registration.js +91 -0
  14. package/dist/mcp-server/tools/obsidianGlobalSearchTool/index.d.ts +12 -0
  15. package/dist/mcp-server/tools/obsidianGlobalSearchTool/index.js +12 -0
  16. package/dist/mcp-server/tools/obsidianGlobalSearchTool/logic.d.ts +77 -0
  17. package/dist/mcp-server/tools/obsidianGlobalSearchTool/logic.js +341 -0
  18. package/dist/mcp-server/tools/obsidianGlobalSearchTool/registration.d.ts +18 -0
  19. package/dist/mcp-server/tools/obsidianGlobalSearchTool/registration.js +69 -0
  20. package/dist/mcp-server/tools/obsidianListFilesTool/index.d.ts +12 -0
  21. package/dist/mcp-server/tools/obsidianListFilesTool/index.js +12 -0
  22. package/dist/mcp-server/tools/obsidianListFilesTool/logic.d.ts +64 -0
  23. package/dist/mcp-server/tools/obsidianListFilesTool/logic.js +179 -0
  24. package/dist/mcp-server/tools/obsidianListFilesTool/registration.d.ts +19 -0
  25. package/dist/mcp-server/tools/obsidianListFilesTool/registration.js +96 -0
  26. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/index.d.ts +3 -0
  27. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/index.js +2 -0
  28. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/logic.d.ts +42 -0
  29. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/logic.js +152 -0
  30. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/registration.d.ts +3 -0
  31. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/registration.js +52 -0
  32. package/dist/mcp-server/tools/obsidianManageTagsTool/index.d.ts +3 -0
  33. package/dist/mcp-server/tools/obsidianManageTagsTool/index.js +2 -0
  34. package/dist/mcp-server/tools/obsidianManageTagsTool/logic.d.ts +28 -0
  35. package/dist/mcp-server/tools/obsidianManageTagsTool/logic.js +161 -0
  36. package/dist/mcp-server/tools/obsidianManageTagsTool/registration.d.ts +3 -0
  37. package/dist/mcp-server/tools/obsidianManageTagsTool/registration.js +52 -0
  38. package/dist/mcp-server/tools/obsidianReadFileTool/index.d.ts +12 -0
  39. package/dist/mcp-server/tools/obsidianReadFileTool/index.js +12 -0
  40. package/dist/mcp-server/tools/obsidianReadFileTool/logic.d.ts +87 -0
  41. package/dist/mcp-server/tools/obsidianReadFileTool/logic.js +216 -0
  42. package/dist/mcp-server/tools/obsidianReadFileTool/registration.d.ts +20 -0
  43. package/dist/mcp-server/tools/obsidianReadFileTool/registration.js +101 -0
  44. package/dist/mcp-server/tools/obsidianSearchReplaceTool/index.d.ts +12 -0
  45. package/dist/mcp-server/tools/obsidianSearchReplaceTool/index.js +12 -0
  46. package/dist/mcp-server/tools/obsidianSearchReplaceTool/logic.d.ts +255 -0
  47. package/dist/mcp-server/tools/obsidianSearchReplaceTool/logic.js +583 -0
  48. package/dist/mcp-server/tools/obsidianSearchReplaceTool/registration.d.ts +22 -0
  49. package/dist/mcp-server/tools/obsidianSearchReplaceTool/registration.js +111 -0
  50. package/dist/mcp-server/tools/obsidianUpdateFileTool/index.d.ts +12 -0
  51. package/dist/mcp-server/tools/obsidianUpdateFileTool/index.js +12 -0
  52. package/dist/mcp-server/tools/obsidianUpdateFileTool/logic.d.ts +183 -0
  53. package/dist/mcp-server/tools/obsidianUpdateFileTool/logic.js +490 -0
  54. package/dist/mcp-server/tools/obsidianUpdateFileTool/registration.d.ts +21 -0
  55. package/dist/mcp-server/tools/obsidianUpdateFileTool/registration.js +108 -0
  56. package/dist/mcp-server/transports/authentication/authContext.d.ts +33 -0
  57. package/dist/mcp-server/transports/authentication/authContext.js +24 -0
  58. package/dist/mcp-server/transports/authentication/authMiddleware.d.ts +30 -0
  59. package/dist/mcp-server/transports/authentication/authMiddleware.js +145 -0
  60. package/dist/mcp-server/transports/authentication/authUtils.d.ts +18 -0
  61. package/dist/mcp-server/transports/authentication/authUtils.js +45 -0
  62. package/dist/mcp-server/transports/authentication/oauthMiddleware.d.ts +24 -0
  63. package/dist/mcp-server/transports/authentication/oauthMiddleware.js +109 -0
  64. package/dist/mcp-server/transports/authentication/types.d.ts +17 -0
  65. package/dist/mcp-server/transports/authentication/types.js +5 -0
  66. package/dist/mcp-server/transports/httpTransport.d.ts +24 -0
  67. package/dist/mcp-server/transports/httpTransport.js +496 -0
  68. package/dist/mcp-server/transports/stdioTransport.d.ts +42 -0
  69. package/dist/mcp-server/transports/stdioTransport.js +63 -0
  70. package/dist/services/obsidianRestAPI/index.d.ts +15 -0
  71. package/dist/services/obsidianRestAPI/index.js +17 -0
  72. package/dist/services/obsidianRestAPI/methods/activeFileMethods.d.ts +38 -0
  73. package/dist/services/obsidianRestAPI/methods/activeFileMethods.js +62 -0
  74. package/dist/services/obsidianRestAPI/methods/commandMethods.d.ts +22 -0
  75. package/dist/services/obsidianRestAPI/methods/commandMethods.js +31 -0
  76. package/dist/services/obsidianRestAPI/methods/openMethods.d.ts +16 -0
  77. package/dist/services/obsidianRestAPI/methods/openMethods.js +21 -0
  78. package/dist/services/obsidianRestAPI/methods/patchMethods.d.ts +37 -0
  79. package/dist/services/obsidianRestAPI/methods/patchMethods.js +94 -0
  80. package/dist/services/obsidianRestAPI/methods/periodicNoteMethods.d.ts +42 -0
  81. package/dist/services/obsidianRestAPI/methods/periodicNoteMethods.js +66 -0
  82. package/dist/services/obsidianRestAPI/methods/searchMethods.d.ts +25 -0
  83. package/dist/services/obsidianRestAPI/methods/searchMethods.js +36 -0
  84. package/dist/services/obsidianRestAPI/methods/vaultMethods.d.ts +58 -0
  85. package/dist/services/obsidianRestAPI/methods/vaultMethods.js +144 -0
  86. package/dist/services/obsidianRestAPI/service.d.ts +195 -0
  87. package/dist/services/obsidianRestAPI/service.js +379 -0
  88. package/dist/services/obsidianRestAPI/types.d.ts +127 -0
  89. package/dist/services/obsidianRestAPI/types.js +7 -0
  90. package/dist/services/obsidianRestAPI/vaultCache/index.d.ts +4 -0
  91. package/dist/services/obsidianRestAPI/vaultCache/index.js +4 -0
  92. package/dist/services/obsidianRestAPI/vaultCache/service.d.ts +88 -0
  93. package/dist/services/obsidianRestAPI/vaultCache/service.js +299 -0
  94. package/dist/types-global/errors.d.ts +73 -0
  95. package/dist/types-global/errors.js +71 -0
  96. package/dist/utils/index.d.ts +5 -8
  97. package/dist/utils/index.js +13 -9
  98. package/dist/utils/internal/asyncUtils.d.ts +54 -0
  99. package/dist/utils/internal/asyncUtils.js +101 -0
  100. package/dist/utils/internal/errorHandler.d.ts +176 -0
  101. package/dist/utils/internal/errorHandler.js +351 -0
  102. package/dist/utils/internal/index.d.ts +4 -0
  103. package/dist/utils/internal/index.js +4 -0
  104. package/dist/utils/internal/logger.d.ts +141 -0
  105. package/dist/utils/internal/logger.js +406 -0
  106. package/dist/utils/internal/requestContext.d.ts +83 -0
  107. package/dist/utils/internal/requestContext.js +72 -0
  108. package/dist/utils/metrics/index.d.ts +1 -0
  109. package/dist/utils/metrics/index.js +1 -0
  110. package/dist/utils/metrics/tokenCounter.d.ts +27 -0
  111. package/dist/utils/metrics/tokenCounter.js +128 -0
  112. package/dist/utils/obsidian/index.d.ts +5 -0
  113. package/dist/utils/obsidian/index.js +5 -0
  114. package/dist/utils/obsidian/obsidianApiUtils.d.ts +14 -0
  115. package/dist/utils/obsidian/obsidianApiUtils.js +29 -0
  116. package/dist/utils/obsidian/obsidianStatUtils.d.ts +68 -0
  117. package/dist/utils/obsidian/obsidianStatUtils.js +143 -0
  118. package/dist/utils/parsing/dateParser.d.ts +56 -0
  119. package/dist/utils/parsing/dateParser.js +104 -0
  120. package/dist/utils/parsing/index.d.ts +2 -0
  121. package/dist/utils/parsing/index.js +3 -0
  122. package/dist/utils/parsing/jsonParser.d.ts +80 -0
  123. package/dist/utils/parsing/jsonParser.js +133 -0
  124. package/dist/utils/security/idGenerator.d.ts +140 -0
  125. package/dist/utils/security/idGenerator.js +194 -0
  126. package/dist/utils/security/index.d.ts +3 -0
  127. package/dist/utils/security/index.js +3 -0
  128. package/dist/utils/security/rateLimiter.d.ts +156 -0
  129. package/dist/utils/security/rateLimiter.js +235 -0
  130. package/dist/utils/security/sanitization.d.ts +244 -0
  131. package/dist/utils/security/sanitization.js +599 -0
  132. package/package.json +58 -37
  133. package/dist/index.js.map +0 -1
  134. package/dist/mcp/handlers.d.ts +0 -29
  135. package/dist/mcp/handlers.js +0 -305
  136. package/dist/mcp/handlers.js.map +0 -1
  137. package/dist/mcp/index.d.ts +0 -6
  138. package/dist/mcp/index.js +0 -7
  139. package/dist/mcp/index.js.map +0 -1
  140. package/dist/mcp/server.d.ts +0 -18
  141. package/dist/mcp/server.js +0 -240
  142. package/dist/mcp/server.js.map +0 -1
  143. package/dist/mcp/types.d.ts +0 -70
  144. package/dist/mcp/types.js +0 -49
  145. package/dist/mcp/types.js.map +0 -1
  146. package/dist/obsidian/client.d.ts +0 -109
  147. package/dist/obsidian/client.js +0 -403
  148. package/dist/obsidian/client.js.map +0 -1
  149. package/dist/obsidian/errors.d.ts +0 -28
  150. package/dist/obsidian/errors.js +0 -75
  151. package/dist/obsidian/errors.js.map +0 -1
  152. package/dist/obsidian/index.d.ts +0 -6
  153. package/dist/obsidian/index.js +0 -7
  154. package/dist/obsidian/index.js.map +0 -1
  155. package/dist/obsidian/types.d.ts +0 -107
  156. package/dist/obsidian/types.js +0 -12
  157. package/dist/obsidian/types.js.map +0 -1
  158. package/dist/resources/index.d.ts +0 -13
  159. package/dist/resources/index.js +0 -15
  160. package/dist/resources/index.js.map +0 -1
  161. package/dist/resources/tags.d.ts +0 -39
  162. package/dist/resources/tags.js +0 -257
  163. package/dist/resources/tags.js.map +0 -1
  164. package/dist/resources/types.d.ts +0 -27
  165. package/dist/resources/types.js +0 -5
  166. package/dist/resources/types.js.map +0 -1
  167. package/dist/tools/base.d.ts +0 -46
  168. package/dist/tools/base.js +0 -88
  169. package/dist/tools/base.js.map +0 -1
  170. package/dist/tools/files/content.d.ts +0 -58
  171. package/dist/tools/files/content.js +0 -171
  172. package/dist/tools/files/content.js.map +0 -1
  173. package/dist/tools/files/index.d.ts +0 -14
  174. package/dist/tools/files/index.js +0 -22
  175. package/dist/tools/files/index.js.map +0 -1
  176. package/dist/tools/files/list.d.ts +0 -35
  177. package/dist/tools/files/list.js +0 -133
  178. package/dist/tools/files/list.js.map +0 -1
  179. package/dist/tools/index.d.ts +0 -21
  180. package/dist/tools/index.js +0 -31
  181. package/dist/tools/index.js.map +0 -1
  182. package/dist/tools/properties/index.d.ts +0 -14
  183. package/dist/tools/properties/index.js +0 -19
  184. package/dist/tools/properties/index.js.map +0 -1
  185. package/dist/tools/properties/manager.d.ts +0 -62
  186. package/dist/tools/properties/manager.js +0 -302
  187. package/dist/tools/properties/manager.js.map +0 -1
  188. package/dist/tools/properties/tools.d.ts +0 -47
  189. package/dist/tools/properties/tools.js +0 -239
  190. package/dist/tools/properties/tools.js.map +0 -1
  191. package/dist/tools/properties/types.d.ts +0 -141
  192. package/dist/tools/properties/types.js +0 -70
  193. package/dist/tools/properties/types.js.map +0 -1
  194. package/dist/tools/search/complex.d.ts +0 -38
  195. package/dist/tools/search/complex.js +0 -270
  196. package/dist/tools/search/complex.js.map +0 -1
  197. package/dist/tools/search/index.d.ts +0 -14
  198. package/dist/tools/search/index.js +0 -20
  199. package/dist/tools/search/index.js.map +0 -1
  200. package/dist/tools/search/simple.d.ts +0 -25
  201. package/dist/tools/search/simple.js +0 -127
  202. package/dist/tools/search/simple.js.map +0 -1
  203. package/dist/utils/errors.d.ts +0 -24
  204. package/dist/utils/errors.js +0 -59
  205. package/dist/utils/errors.js.map +0 -1
  206. package/dist/utils/idGenerator.d.ts +0 -15
  207. package/dist/utils/idGenerator.js +0 -21
  208. package/dist/utils/idGenerator.js.map +0 -1
  209. package/dist/utils/index.js.map +0 -1
  210. package/dist/utils/logging.d.ts +0 -245
  211. package/dist/utils/logging.js +0 -417
  212. package/dist/utils/logging.js.map +0 -1
  213. package/dist/utils/rate-limiting.d.ts +0 -50
  214. package/dist/utils/rate-limiting.js +0 -94
  215. package/dist/utils/rate-limiting.js.map +0 -1
  216. package/dist/utils/tokenization.d.ts +0 -28
  217. package/dist/utils/tokenization.js +0 -75
  218. package/dist/utils/tokenization.js.map +0 -1
  219. package/dist/utils/validation.d.ts +0 -22
  220. package/dist/utils/validation.js +0 -92
  221. package/dist/utils/validation.js.map +0 -1
@@ -1,417 +0,0 @@
1
- /**
2
- * Standardized Logging System for the Obsidian MCP Server
3
- *
4
- * This module provides structured logging capabilities aligned with MCP best practices.
5
- * It supports categorized errors, severity levels, context tracking, performance
6
- * monitoring, and secure logging patterns.
7
- *
8
- * @module utils/logging
9
- */
10
- import fs from "fs";
11
- import path from "path";
12
- import process from "process";
13
- import winston from "winston";
14
- /**
15
- * Error categories following MCP standards
16
- */
17
- export var ErrorCategoryType;
18
- (function (ErrorCategoryType) {
19
- ErrorCategoryType["CATEGORY_VALIDATION"] = "VALIDATION";
20
- ErrorCategoryType["CATEGORY_AUTHENTICATION"] = "AUTHENTICATION";
21
- ErrorCategoryType["CATEGORY_AUTHORIZATION"] = "AUTHORIZATION";
22
- ErrorCategoryType["CATEGORY_BUSINESS_LOGIC"] = "BUSINESS_LOGIC";
23
- ErrorCategoryType["CATEGORY_DATA_ACCESS"] = "DATA_ACCESS";
24
- ErrorCategoryType["CATEGORY_EXTERNAL_SERVICE"] = "EXTERNAL_SERVICE";
25
- ErrorCategoryType["CATEGORY_SYSTEM"] = "SYSTEM";
26
- ErrorCategoryType["CATEGORY_UNKNOWN"] = "UNKNOWN";
27
- })(ErrorCategoryType || (ErrorCategoryType = {}));
28
- /**
29
- * Log levels aligned with MCP's ErrorSeverityLevel
30
- */
31
- export var LogLevel;
32
- (function (LogLevel) {
33
- /** Critical errors that require immediate attention */
34
- LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
35
- /** Potentially harmful situations that should be reviewed */
36
- LogLevel[LogLevel["WARN"] = 1] = "WARN";
37
- /** General informational messages about system operation */
38
- LogLevel[LogLevel["INFO"] = 2] = "INFO";
39
- /** Detailed information for debugging purposes */
40
- LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
41
- /** Highly detailed tracing information */
42
- LogLevel[LogLevel["TRACE"] = 4] = "TRACE";
43
- })(LogLevel || (LogLevel = {}));
44
- /**
45
- * Maps LogLevel to MCP severity level for integration with MCP error handling
46
- */
47
- export const logLevelToMcpSeverity = {
48
- [LogLevel.ERROR]: 3, // SEVERITY_ERROR
49
- [LogLevel.WARN]: 2, // SEVERITY_WARN
50
- [LogLevel.INFO]: 1, // SEVERITY_INFO
51
- [LogLevel.DEBUG]: 0, // SEVERITY_DEBUG
52
- [LogLevel.TRACE]: 0 // Also maps to SEVERITY_DEBUG
53
- };
54
- /**
55
- * Winston-compatible log levels
56
- */
57
- const winstonLogLevels = {
58
- error: 0,
59
- warn: 1,
60
- info: 2,
61
- debug: 3,
62
- trace: 4
63
- };
64
- /**
65
- * Default logger configuration
66
- */
67
- const DEFAULT_CONFIG = {
68
- level: process.env.NODE_ENV === 'production'
69
- ? LogLevel.INFO
70
- : LogLevel.DEBUG,
71
- includeTimestamps: true,
72
- includeLevel: true,
73
- maskSensitiveData: true,
74
- sensitiveFields: ['password', 'token', 'secret', 'key', 'auth', 'credential'],
75
- logDir: "logs",
76
- files: true,
77
- fileNames: {
78
- combined: "combined.log",
79
- error: "error.log",
80
- warn: "warn.log",
81
- info: "info.log",
82
- debug: "debug.log"
83
- }
84
- };
85
- /**
86
- * Enhanced logger for MCP server operations with structured logging support
87
- * Implements file-based logging with zero console output
88
- */
89
- export class Logger {
90
- name;
91
- config;
92
- timers = new Map();
93
- logger;
94
- /**
95
- * Creates a new logger instance
96
- *
97
- * @param name - Component name for this logger
98
- * @param config - Optional configuration overrides
99
- */
100
- constructor(name, config = {}) {
101
- this.name = name;
102
- this.config = {
103
- ...DEFAULT_CONFIG,
104
- ...config,
105
- fileNames: {
106
- ...DEFAULT_CONFIG.fileNames,
107
- ...config.fileNames
108
- }
109
- };
110
- // Initialize logger with silent transport as fallback
111
- this.logger = winston.createLogger({
112
- levels: winstonLogLevels,
113
- defaultMeta: { component: this.name },
114
- transports: [
115
- // Silent transport to prevent "no transports" warning
116
- new winston.transports.Console({
117
- silent: true
118
- })
119
- ]
120
- });
121
- this.initializeLogger();
122
- }
123
- /**
124
- * Initialize or reinitialize the Winston logger
125
- */
126
- initializeLogger() {
127
- if (this.config.files && this.config.logDir) {
128
- if (!fs.existsSync(this.config.logDir)) {
129
- try {
130
- fs.mkdirSync(this.config.logDir, { recursive: true });
131
- }
132
- catch (error) {
133
- // Silently continue - we have a silent transport as fallback
134
- }
135
- }
136
- }
137
- // Create log format
138
- const logFormat = winston.format.combine(winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.json());
139
- // Initialize transports array with a silent transport to avoid "no transports" warning
140
- const transports = [
141
- new winston.transports.Console({
142
- silent: true, // Silent transport that doesn't output logs
143
- format: logFormat
144
- })
145
- ];
146
- // Add file transports if enabled
147
- if (this.config.files && this.config.logDir) {
148
- try {
149
- const fileNames = this.config.fileNames || DEFAULT_CONFIG.fileNames;
150
- // Combined log file
151
- if (fileNames?.combined) {
152
- transports.push(new winston.transports.File({
153
- filename: path.join(this.config.logDir, fileNames.combined),
154
- format: logFormat
155
- }));
156
- }
157
- // Level-specific log files
158
- if (fileNames?.error) {
159
- transports.push(new winston.transports.File({
160
- filename: path.join(this.config.logDir, fileNames.error),
161
- level: 'error',
162
- format: logFormat
163
- }));
164
- }
165
- if (fileNames?.warn) {
166
- transports.push(new winston.transports.File({
167
- filename: path.join(this.config.logDir, fileNames.warn),
168
- level: 'warn',
169
- format: logFormat
170
- }));
171
- }
172
- if (fileNames?.info) {
173
- transports.push(new winston.transports.File({
174
- filename: path.join(this.config.logDir, fileNames.info),
175
- level: 'info',
176
- format: logFormat
177
- }));
178
- }
179
- if (fileNames?.debug) {
180
- transports.push(new winston.transports.File({
181
- filename: path.join(this.config.logDir, fileNames.debug),
182
- level: 'debug',
183
- format: logFormat
184
- }));
185
- }
186
- }
187
- catch (error) {
188
- // Silently continue with just the silent transport if file transports fail
189
- }
190
- }
191
- // Replace logger configuration
192
- this.logger.configure({
193
- levels: winstonLogLevels,
194
- level: LogLevel[this.config.level].toLowerCase(),
195
- defaultMeta: { component: this.name },
196
- transports
197
- });
198
- }
199
- /**
200
- * Maps internal LogLevel to Winston log level
201
- */
202
- levelToWinstonLevel(level) {
203
- const levelName = LogLevel[level].toLowerCase();
204
- return levelName === 'trace' ? 'debug' : levelName;
205
- }
206
- /**
207
- * Creates a standardized error object for MCP compatibility
208
- *
209
- * @param message - Human-readable error description
210
- * @param code - Machine-readable error identifier
211
- * @param category - Type of error
212
- * @param context - Additional error context
213
- * @returns Standardized error object
214
- */
215
- createStandardizedError(message, code, category = ErrorCategoryType.CATEGORY_UNKNOWN, context) {
216
- return {
217
- errorMessage: message,
218
- errorCode: code,
219
- errorCategory: category,
220
- errorSeverity: LogLevel.ERROR,
221
- errorTimestamp: new Date().toISOString(),
222
- errorContext: context ? this.processSensitiveData(context) : undefined,
223
- errorStack: new Error().stack
224
- };
225
- }
226
- /**
227
- * Wraps an exception as a standardized error
228
- *
229
- * @param error - Original error object
230
- * @param message - Optional override message
231
- * @param category - Error category
232
- * @returns Standardized error object
233
- */
234
- wrapExceptionAsStandardizedError(error, message, category = ErrorCategoryType.CATEGORY_UNKNOWN) {
235
- const errorObject = error instanceof Error ? error : new Error(String(error));
236
- return {
237
- errorMessage: message || errorObject.message,
238
- errorCode: errorObject.name || 'UNKNOWN_ERROR',
239
- errorCategory: category,
240
- errorSeverity: LogLevel.ERROR,
241
- errorTimestamp: new Date().toISOString(),
242
- errorStack: errorObject.stack
243
- };
244
- }
245
- /**
246
- * Masks sensitive data in objects before logging
247
- *
248
- * @param data - Data object to process
249
- * @returns Processed data with sensitive fields masked
250
- */
251
- processSensitiveData(data) {
252
- if (!this.config.maskSensitiveData)
253
- return data;
254
- const result = {};
255
- const sensitiveFields = this.config.sensitiveFields;
256
- for (const [key, value] of Object.entries(data)) {
257
- // Check if key contains any sensitive field name
258
- const isSensitive = sensitiveFields.some(field => key.toLowerCase().includes(field.toLowerCase()));
259
- if (isSensitive) {
260
- // Mask sensitive values
261
- result[key] = '********';
262
- }
263
- else if (value && typeof value === 'object' && !Array.isArray(value)) {
264
- // Recursively process nested objects
265
- result[key] = this.processSensitiveData(value);
266
- }
267
- else {
268
- // Pass through non-sensitive values
269
- result[key] = value;
270
- }
271
- }
272
- return result;
273
- }
274
- /**
275
- * Internal method to log a message using Winston
276
- *
277
- * @param level - Log level
278
- * @param message - Log message
279
- * @param context - Optional context data
280
- */
281
- log(level, message, context) {
282
- if (level > this.config.level)
283
- return;
284
- const winstonLevel = this.levelToWinstonLevel(level);
285
- const processedContext = context ? this.processSensitiveData(context) : undefined;
286
- this.logger.log(winstonLevel, message, { context: processedContext });
287
- }
288
- /**
289
- * Log an error message with optional error object and context
290
- *
291
- * @param message - Error message
292
- * @param errorOrContext - Error object or context
293
- * @param context - Additional context
294
- */
295
- error(message, errorOrContext, context) {
296
- if (errorOrContext instanceof Error) {
297
- const errorObj = this.wrapExceptionAsStandardizedError(errorOrContext);
298
- const combinedContext = {
299
- ...(context || {}),
300
- error: errorObj
301
- };
302
- this.log(LogLevel.ERROR, message, combinedContext);
303
- }
304
- else {
305
- this.log(LogLevel.ERROR, message, errorOrContext || context);
306
- }
307
- }
308
- /**
309
- * Log a warning message
310
- *
311
- * @param message - Warning message
312
- * @param context - Optional context data
313
- */
314
- warn(message, context) {
315
- this.log(LogLevel.WARN, message, context);
316
- }
317
- /**
318
- * Log an info message
319
- *
320
- * @param message - Info message
321
- * @param context - Optional context data
322
- */
323
- info(message, context) {
324
- this.log(LogLevel.INFO, message, context);
325
- }
326
- /**
327
- * Log a debug message
328
- *
329
- * @param message - Debug message
330
- * @param context - Optional context data
331
- */
332
- debug(message, context) {
333
- this.log(LogLevel.DEBUG, message, context);
334
- }
335
- /**
336
- * Log a trace message
337
- *
338
- * @param message - Trace message
339
- * @param context - Optional context data
340
- */
341
- trace(message, context) {
342
- this.log(LogLevel.TRACE, message, context);
343
- }
344
- /**
345
- * Set the log level
346
- *
347
- * @param level - New log level
348
- */
349
- setLevel(level) {
350
- this.config.level = level;
351
- this.logger.level = this.levelToWinstonLevel(level);
352
- }
353
- /**
354
- * Start a timer for performance tracking
355
- *
356
- * @param id - Timer identifier
357
- */
358
- startTimer(id) {
359
- this.timers.set(id, performance.now());
360
- }
361
- /**
362
- * End a timer and log the elapsed time
363
- *
364
- * @param id - Timer identifier
365
- * @param message - Log message prefix
366
- * @param level - Log level for the timing message
367
- */
368
- endTimer(id, message = 'Operation completed', level = LogLevel.DEBUG) {
369
- const startTime = this.timers.get(id);
370
- if (startTime === undefined) {
371
- this.warn(`Timer "${id}" does not exist`, { action: 'endTimer' });
372
- return 0;
373
- }
374
- const endTime = performance.now();
375
- const elapsedMs = endTime - startTime;
376
- this.log(level, `${message} in ${elapsedMs.toFixed(2)}ms`, {
377
- timerId: id,
378
- processingTimeMs: elapsedMs
379
- });
380
- this.timers.delete(id);
381
- return elapsedMs;
382
- }
383
- /**
384
- * Log the result of an operation with timing information
385
- *
386
- * @param success - Whether the operation was successful
387
- * @param operation - Operation name
388
- * @param elapsedMs - Processing time in milliseconds
389
- * @param context - Optional operation context
390
- */
391
- logOperationResult(success, operation, elapsedMs, context) {
392
- const level = success ? LogLevel.INFO : LogLevel.ERROR;
393
- const status = success ? 'succeeded' : 'failed';
394
- this.log(level, `Operation ${operation} ${status}`, {
395
- ...(context || {}),
396
- operation,
397
- success,
398
- processingTimeMs: elapsedMs
399
- });
400
- }
401
- }
402
- /**
403
- * Create and return a namespaced logger
404
- *
405
- * @param name - Component name for the logger
406
- * @param config - Optional configuration overrides
407
- * @returns Configured logger instance
408
- */
409
- export function createLogger(name, config) {
410
- return new Logger(name, config);
411
- }
412
- // Create a global root logger
413
- export const rootLogger = createLogger('obsidian-mcp-server', {
414
- files: true,
415
- logDir: "logs"
416
- });
417
- //# sourceMappingURL=logging.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/utils/logging.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- /**
2
- * Configuration for rate limiting
3
- */
4
- export interface RateLimitConfig {
5
- windowMs: number;
6
- maxRequests: number;
7
- }
8
- /**
9
- * Default rate limit configuration
10
- */
11
- export declare const DEFAULT_RATE_LIMIT_CONFIG: RateLimitConfig;
12
- /**
13
- * RateLimit manages request rate limiting for API endpoints
14
- */
15
- export declare class RateLimiter {
16
- private config;
17
- private requestCounts;
18
- private cleanupInterval;
19
- constructor(config?: RateLimitConfig);
20
- /**
21
- * Check if a request is within rate limits
22
- * @param key Identifier for the rate limit bucket (e.g., toolName)
23
- * @returns Whether the request is allowed
24
- */
25
- checkRateLimit(key: string): boolean;
26
- /**
27
- * Check rate limit and throw an error if exceeded
28
- * @param key Identifier for the rate limit bucket
29
- * @throws ObsidianError if rate limit is exceeded
30
- */
31
- enforceRateLimit(key: string): void;
32
- /**
33
- * Get information about current rate limit status
34
- * @param key Identifier for the rate limit bucket
35
- * @returns Rate limit information or null if no requests have been made
36
- */
37
- getRateLimitInfo(key: string): {
38
- remaining: number;
39
- resetTime: number;
40
- } | null;
41
- /**
42
- * Clean up expired rate limit entries
43
- */
44
- private cleanup;
45
- /**
46
- * Clean up resources (e.g., when shutting down)
47
- */
48
- dispose(): void;
49
- }
50
- export declare const rateLimiter: RateLimiter;
@@ -1,94 +0,0 @@
1
- /**
2
- * Rate limiting utilities for the Obsidian MCP Server
3
- */
4
- import { ObsidianError } from './errors.js';
5
- /**
6
- * Default rate limit configuration
7
- */
8
- export const DEFAULT_RATE_LIMIT_CONFIG = {
9
- windowMs: 15 * 60 * 1000, // 15 minutes
10
- maxRequests: 200
11
- };
12
- /**
13
- * RateLimit manages request rate limiting for API endpoints
14
- */
15
- export class RateLimiter {
16
- config;
17
- requestCounts = new Map();
18
- cleanupInterval;
19
- constructor(config = DEFAULT_RATE_LIMIT_CONFIG) {
20
- this.config = config;
21
- // Clean up expired rate limit entries periodically
22
- this.cleanupInterval = setInterval(() => this.cleanup(), 60000); // Clean up every minute
23
- }
24
- /**
25
- * Check if a request is within rate limits
26
- * @param key Identifier for the rate limit bucket (e.g., toolName)
27
- * @returns Whether the request is allowed
28
- */
29
- checkRateLimit(key) {
30
- const now = Date.now();
31
- const requestInfo = this.requestCounts.get(key);
32
- if (!requestInfo || now > requestInfo.resetTime) {
33
- // Reset counter for new window
34
- this.requestCounts.set(key, {
35
- count: 1,
36
- resetTime: now + this.config.windowMs
37
- });
38
- return true;
39
- }
40
- if (requestInfo.count >= this.config.maxRequests) {
41
- return false;
42
- }
43
- requestInfo.count++;
44
- return true;
45
- }
46
- /**
47
- * Check rate limit and throw an error if exceeded
48
- * @param key Identifier for the rate limit bucket
49
- * @throws ObsidianError if rate limit is exceeded
50
- */
51
- enforceRateLimit(key) {
52
- if (!this.checkRateLimit(key)) {
53
- throw new ObsidianError(`Rate limit exceeded for ${key}. Please try again later.`, 42900 // 42900 = Rate limit exceeded
54
- );
55
- }
56
- }
57
- /**
58
- * Get information about current rate limit status
59
- * @param key Identifier for the rate limit bucket
60
- * @returns Rate limit information or null if no requests have been made
61
- */
62
- getRateLimitInfo(key) {
63
- const requestInfo = this.requestCounts.get(key);
64
- if (!requestInfo) {
65
- return null;
66
- }
67
- return {
68
- remaining: Math.max(0, this.config.maxRequests - requestInfo.count),
69
- resetTime: requestInfo.resetTime
70
- };
71
- }
72
- /**
73
- * Clean up expired rate limit entries
74
- */
75
- cleanup() {
76
- const now = Date.now();
77
- for (const [key, info] of this.requestCounts.entries()) {
78
- if (now > info.resetTime) {
79
- this.requestCounts.delete(key);
80
- }
81
- }
82
- }
83
- /**
84
- * Clean up resources (e.g., when shutting down)
85
- */
86
- dispose() {
87
- if (this.cleanupInterval) {
88
- clearInterval(this.cleanupInterval);
89
- }
90
- }
91
- }
92
- // Export a singleton instance with default configuration
93
- export const rateLimiter = new RateLimiter();
94
- //# sourceMappingURL=rate-limiting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rate-limiting.js","sourceRoot":"","sources":["../../src/utils/rate-limiting.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAoB;IACxD,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;IACvC,WAAW,EAAE,GAAG;CACR,CAAC;AAEX;;GAEG;AACH,MAAM,OAAO,WAAW;IAIF;IAHZ,aAAa,GAAG,IAAI,GAAG,EAAgD,CAAC;IACxE,eAAe,CAAiB;IAExC,YAAoB,SAA0B,yBAAyB;QAAnD,WAAM,GAAN,MAAM,CAA6C;QACrE,mDAAmD;QACnD,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;IAC3F,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,GAAW;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;YAChD,+BAA+B;YAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC1B,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;aACtC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,GAAW;QAC1B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,aAAa,CACrB,2BAA2B,GAAG,2BAA2B,EACzD,KAAK,CAAC,8BAA8B;aACrC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,GAAW;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;YACnE,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC"}
@@ -1,28 +0,0 @@
1
- export declare const MAX_TOKENS: number;
2
- export declare const TRUNCATION_MESSAGE = "\n\n[Response truncated due to length]";
3
- /**
4
- * Handles token counting and text truncation to stay within token limits
5
- */
6
- export declare class TokenCounter {
7
- private tokenizer;
8
- private isShuttingDown;
9
- private cleanupListener;
10
- constructor();
11
- /**
12
- * Count the number of tokens in a string
13
- */
14
- countTokens(text: string): number;
15
- /**
16
- * Truncate text to stay within token limit
17
- */
18
- truncateToTokenLimit(text: string, limit?: number): string;
19
- /**
20
- * Clean up resources and remove listeners
21
- */
22
- cleanup(): void;
23
- /**
24
- * Remove process event listeners
25
- */
26
- private removeListeners;
27
- }
28
- export declare const tokenCounter: TokenCounter;
@@ -1,75 +0,0 @@
1
- /**
2
- * Token counting utilities for the Obsidian MCP Server
3
- */
4
- import { encoding_for_model } from "tiktoken";
5
- // Load token limits from environment or use defaults
6
- export const MAX_TOKENS = parseInt(process.env.MAX_TOKENS ?? '20000');
7
- export const TRUNCATION_MESSAGE = "\n\n[Response truncated due to length]";
8
- /**
9
- * Handles token counting and text truncation to stay within token limits
10
- */
11
- export class TokenCounter {
12
- tokenizer = encoding_for_model("gpt-4"); // This is strictly for token counting, not for LLM inference
13
- isShuttingDown = false;
14
- cleanupListener;
15
- constructor() {
16
- // Define the cleanup logic
17
- this.cleanupListener = () => {
18
- if (!this.isShuttingDown) {
19
- this.isShuttingDown = true;
20
- if (this.tokenizer) {
21
- this.tokenizer.free();
22
- // No need to explicitly set this.tokenizer to null,
23
- // but ensure it's not used after free()
24
- }
25
- // Remove listeners after execution to prevent multiple calls
26
- // and potential leaks if cleanup is called manually before exit
27
- this.removeListeners();
28
- }
29
- };
30
- // Attach listeners
31
- process.on('exit', this.cleanupListener);
32
- process.on('SIGINT', this.cleanupListener);
33
- process.on('SIGTERM', this.cleanupListener);
34
- process.on('uncaughtException', this.cleanupListener);
35
- }
36
- /**
37
- * Count the number of tokens in a string
38
- */
39
- countTokens(text) {
40
- return this.tokenizer.encode(text).length;
41
- }
42
- /**
43
- * Truncate text to stay within token limit
44
- */
45
- truncateToTokenLimit(text, limit = MAX_TOKENS) {
46
- const tokens = this.tokenizer.encode(text);
47
- if (tokens.length <= limit) {
48
- return text;
49
- }
50
- // Reserve tokens for truncation message
51
- const messageTokens = this.tokenizer.encode(TRUNCATION_MESSAGE);
52
- const availableTokens = limit - messageTokens.length;
53
- // Decode truncated tokens back to text
54
- const truncatedText = this.tokenizer.decode(tokens.slice(0, availableTokens));
55
- return truncatedText + TRUNCATION_MESSAGE;
56
- }
57
- /**
58
- * Clean up resources and remove listeners
59
- */
60
- cleanup() {
61
- this.cleanupListener(); // Call the main cleanup logic
62
- }
63
- /**
64
- * Remove process event listeners
65
- */
66
- removeListeners() {
67
- process.off('exit', this.cleanupListener);
68
- process.off('SIGINT', this.cleanupListener);
69
- process.off('SIGTERM', this.cleanupListener);
70
- process.off('uncaughtException', this.cleanupListener);
71
- }
72
- }
73
- // Export a singleton instance
74
- export const tokenCounter = new TokenCounter();
75
- //# sourceMappingURL=tokenization.js.map