sfcc-dev-mcp 1.0.21 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -30
- package/dist/clients/agent-instructions-client.d.ts +3 -0
- package/dist/clients/agent-instructions-client.d.ts.map +1 -1
- package/dist/clients/agent-instructions-client.js +42 -10
- package/dist/clients/agent-instructions-client.js.map +1 -1
- package/dist/clients/base/abstract-documentation-client.d.ts +4 -0
- package/dist/clients/base/abstract-documentation-client.d.ts.map +1 -1
- package/dist/clients/base/abstract-documentation-client.js +9 -1
- package/dist/clients/base/abstract-documentation-client.js.map +1 -1
- package/dist/clients/base/http-client.d.ts +10 -3
- package/dist/clients/base/http-client.d.ts.map +1 -1
- package/dist/clients/base/http-client.js +94 -16
- package/dist/clients/base/http-client.js.map +1 -1
- package/dist/clients/base/oauth-token.d.ts +3 -0
- package/dist/clients/base/oauth-token.d.ts.map +1 -1
- package/dist/clients/base/oauth-token.js +23 -3
- package/dist/clients/base/oauth-token.js.map +1 -1
- package/dist/clients/base/ocapi-auth-client.d.ts.map +1 -1
- package/dist/clients/base/ocapi-auth-client.js +22 -2
- package/dist/clients/base/ocapi-auth-client.js.map +1 -1
- package/dist/clients/docs/class-name-resolver.d.ts +7 -4
- package/dist/clients/docs/class-name-resolver.d.ts.map +1 -1
- package/dist/clients/docs/class-name-resolver.js.map +1 -1
- package/dist/clients/docs/documentation-scanner.d.ts +2 -0
- package/dist/clients/docs/documentation-scanner.d.ts.map +1 -1
- package/dist/clients/docs/documentation-scanner.js +39 -17
- package/dist/clients/docs/documentation-scanner.js.map +1 -1
- package/dist/clients/docs-client.d.ts +4 -3
- package/dist/clients/docs-client.d.ts.map +1 -1
- package/dist/clients/docs-client.js.map +1 -1
- package/dist/clients/logs/log-client.d.ts +1 -0
- package/dist/clients/logs/log-client.d.ts.map +1 -1
- package/dist/clients/logs/log-client.js +13 -21
- package/dist/clients/logs/log-client.js.map +1 -1
- package/dist/clients/logs/log-file-discovery.d.ts +1 -0
- package/dist/clients/logs/log-file-discovery.d.ts.map +1 -1
- package/dist/clients/logs/log-file-discovery.js +19 -6
- package/dist/clients/logs/log-file-discovery.js.map +1 -1
- package/dist/clients/logs/log-file-reader.d.ts +2 -0
- package/dist/clients/logs/log-file-reader.d.ts.map +1 -1
- package/dist/clients/logs/log-file-reader.js +31 -8
- package/dist/clients/logs/log-file-reader.js.map +1 -1
- package/dist/clients/logs/log-formatter.d.ts +2 -2
- package/dist/clients/logs/log-formatter.d.ts.map +1 -1
- package/dist/clients/logs/log-formatter.js.map +1 -1
- package/dist/clients/logs/log-types.d.ts +4 -0
- package/dist/clients/logs/log-types.d.ts.map +1 -1
- package/dist/clients/logs/webdav-client-manager.d.ts.map +1 -1
- package/dist/clients/logs/webdav-client-manager.js.map +1 -1
- package/dist/clients/ocapi/code-versions-client.d.ts +23 -4
- package/dist/clients/ocapi/code-versions-client.d.ts.map +1 -1
- package/dist/clients/ocapi/code-versions-client.js +2 -2
- package/dist/clients/ocapi/code-versions-client.js.map +1 -1
- package/dist/clients/ocapi/site-preferences-client.d.ts +2 -42
- package/dist/clients/ocapi/site-preferences-client.d.ts.map +1 -1
- package/dist/clients/ocapi/site-preferences-client.js.map +1 -1
- package/dist/clients/ocapi/system-objects-client.d.ts +7 -39
- package/dist/clients/ocapi/system-objects-client.d.ts.map +1 -1
- package/dist/clients/ocapi/system-objects-client.js.map +1 -1
- package/dist/clients/script-debugger/script-debugger-client.d.ts +9 -1
- package/dist/clients/script-debugger/script-debugger-client.d.ts.map +1 -1
- package/dist/clients/script-debugger/script-debugger-client.js +182 -127
- package/dist/clients/script-debugger/script-debugger-client.js.map +1 -1
- package/dist/clients/sfra-client.d.ts.map +1 -1
- package/dist/clients/sfra-client.js.map +1 -1
- package/dist/config/cli-options.d.ts +16 -0
- package/dist/config/cli-options.d.ts.map +1 -0
- package/dist/config/cli-options.js +56 -0
- package/dist/config/cli-options.js.map +1 -0
- package/dist/config/configuration-factory.d.ts.map +1 -1
- package/dist/config/configuration-factory.js +12 -6
- package/dist/config/configuration-factory.js.map +1 -1
- package/dist/config/credential-validation.d.ts +25 -0
- package/dist/config/credential-validation.d.ts.map +1 -0
- package/dist/config/credential-validation.js +42 -0
- package/dist/config/credential-validation.js.map +1 -0
- package/dist/config/dw-json-loader.d.ts.map +1 -1
- package/dist/config/dw-json-loader.js +19 -68
- package/dist/config/dw-json-loader.js.map +1 -1
- package/dist/config/path-security-policy.d.ts +6 -0
- package/dist/config/path-security-policy.d.ts.map +1 -0
- package/dist/config/path-security-policy.js +63 -0
- package/dist/config/path-security-policy.js.map +1 -0
- package/dist/config/workspace-roots.d.ts +1 -0
- package/dist/config/workspace-roots.d.ts.map +1 -1
- package/dist/config/workspace-roots.js +26 -77
- package/dist/config/workspace-roots.js.map +1 -1
- package/dist/core/handlers/abstract-client-handler.d.ts +23 -2
- package/dist/core/handlers/abstract-client-handler.d.ts.map +1 -1
- package/dist/core/handlers/abstract-client-handler.js +33 -3
- package/dist/core/handlers/abstract-client-handler.js.map +1 -1
- package/dist/core/handlers/agent-instructions-handler.d.ts +1 -1
- package/dist/core/handlers/agent-instructions-handler.d.ts.map +1 -1
- package/dist/core/handlers/agent-instructions-handler.js +2 -2
- package/dist/core/handlers/agent-instructions-handler.js.map +1 -1
- package/dist/core/handlers/base-handler.d.ts +14 -11
- package/dist/core/handlers/base-handler.d.ts.map +1 -1
- package/dist/core/handlers/base-handler.js +38 -22
- package/dist/core/handlers/base-handler.js.map +1 -1
- package/dist/core/handlers/cartridge-handler.d.ts +3 -8
- package/dist/core/handlers/cartridge-handler.d.ts.map +1 -1
- package/dist/core/handlers/cartridge-handler.js +10 -18
- package/dist/core/handlers/cartridge-handler.js.map +1 -1
- package/dist/core/handlers/code-version-handler.d.ts +3 -9
- package/dist/core/handlers/code-version-handler.d.ts.map +1 -1
- package/dist/core/handlers/code-version-handler.js +10 -21
- package/dist/core/handlers/code-version-handler.js.map +1 -1
- package/dist/core/handlers/job-log-handler.d.ts +3 -9
- package/dist/core/handlers/job-log-handler.d.ts.map +1 -1
- package/dist/core/handlers/job-log-handler.js +10 -21
- package/dist/core/handlers/job-log-handler.js.map +1 -1
- package/dist/core/handlers/lifecycle-utils.d.ts +5 -0
- package/dist/core/handlers/lifecycle-utils.d.ts.map +1 -0
- package/dist/core/handlers/lifecycle-utils.js +18 -0
- package/dist/core/handlers/lifecycle-utils.js.map +1 -0
- package/dist/core/handlers/log-handler.d.ts +3 -9
- package/dist/core/handlers/log-handler.d.ts.map +1 -1
- package/dist/core/handlers/log-handler.js +10 -21
- package/dist/core/handlers/log-handler.js.map +1 -1
- package/dist/core/handlers/script-debugger-handler.d.ts +3 -9
- package/dist/core/handlers/script-debugger-handler.d.ts.map +1 -1
- package/dist/core/handlers/script-debugger-handler.js +10 -21
- package/dist/core/handlers/script-debugger-handler.js.map +1 -1
- package/dist/core/handlers/simple-client-handler.d.ts +3 -3
- package/dist/core/handlers/simple-client-handler.d.ts.map +1 -1
- package/dist/core/handlers/simple-client-handler.js +5 -3
- package/dist/core/handlers/simple-client-handler.js.map +1 -1
- package/dist/core/handlers/system-object-handler.d.ts +3 -9
- package/dist/core/handlers/system-object-handler.d.ts.map +1 -1
- package/dist/core/handlers/system-object-handler.js +10 -21
- package/dist/core/handlers/system-object-handler.js.map +1 -1
- package/dist/core/handlers/validation-helpers.d.ts +5 -26
- package/dist/core/handlers/validation-helpers.d.ts.map +1 -1
- package/dist/core/handlers/validation-helpers.js +79 -81
- package/dist/core/handlers/validation-helpers.js.map +1 -1
- package/dist/core/instruction-advisor.d.ts +3 -0
- package/dist/core/instruction-advisor.d.ts.map +1 -1
- package/dist/core/instruction-advisor.js +25 -2
- package/dist/core/instruction-advisor.js.map +1 -1
- package/dist/core/server-tool-call-lifecycle.d.ts +38 -0
- package/dist/core/server-tool-call-lifecycle.d.ts.map +1 -0
- package/dist/core/server-tool-call-lifecycle.js +128 -0
- package/dist/core/server-tool-call-lifecycle.js.map +1 -0
- package/dist/core/server-tool-catalog.d.ts +19 -0
- package/dist/core/server-tool-catalog.d.ts.map +1 -0
- package/dist/core/server-tool-catalog.js +52 -0
- package/dist/core/server-tool-catalog.js.map +1 -0
- package/dist/core/server-workspace-discovery.d.ts +38 -0
- package/dist/core/server-workspace-discovery.d.ts.map +1 -0
- package/dist/core/server-workspace-discovery.js +68 -0
- package/dist/core/server-workspace-discovery.js.map +1 -0
- package/dist/core/server.d.ts +27 -3
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +247 -165
- package/dist/core/server.js.map +1 -1
- package/dist/core/tool-argument-validator.d.ts +24 -0
- package/dist/core/tool-argument-validator.d.ts.map +1 -0
- package/dist/core/tool-argument-validator.js +186 -0
- package/dist/core/tool-argument-validator.js.map +1 -0
- package/dist/core/tool-error-response.d.ts +21 -0
- package/dist/core/tool-error-response.d.ts.map +1 -0
- package/dist/core/tool-error-response.js +64 -0
- package/dist/core/tool-error-response.js.map +1 -0
- package/dist/core/tool-schemas/agent-instruction-tools.d.ts +4 -0
- package/dist/core/tool-schemas/agent-instruction-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/agent-instruction-tools.js +6 -2
- package/dist/core/tool-schemas/agent-instruction-tools.js.map +1 -1
- package/dist/core/tool-schemas/cartridge-tools.d.ts +3 -0
- package/dist/core/tool-schemas/cartridge-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/cartridge-tools.js +3 -0
- package/dist/core/tool-schemas/cartridge-tools.js.map +1 -1
- package/dist/core/tool-schemas/code-version-tools.d.ts +1 -0
- package/dist/core/tool-schemas/code-version-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/code-version-tools.js +1 -0
- package/dist/core/tool-schemas/code-version-tools.js.map +1 -1
- package/dist/core/tool-schemas/documentation-tools.d.ts +6 -0
- package/dist/core/tool-schemas/documentation-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/documentation-tools.js +6 -0
- package/dist/core/tool-schemas/documentation-tools.js.map +1 -1
- package/dist/core/tool-schemas/isml-tools.d.ts +3 -0
- package/dist/core/tool-schemas/isml-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/isml-tools.js +4 -1
- package/dist/core/tool-schemas/isml-tools.js.map +1 -1
- package/dist/core/tool-schemas/log-tools.d.ts +28 -0
- package/dist/core/tool-schemas/log-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/log-tools.js +21 -7
- package/dist/core/tool-schemas/log-tools.js.map +1 -1
- package/dist/core/tool-schemas/script-debugger-tools.d.ts +7 -0
- package/dist/core/tool-schemas/script-debugger-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/script-debugger-tools.js +9 -2
- package/dist/core/tool-schemas/script-debugger-tools.js.map +1 -1
- package/dist/core/tool-schemas/sfra-tools.d.ts +3 -0
- package/dist/core/tool-schemas/sfra-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/sfra-tools.js +3 -0
- package/dist/core/tool-schemas/sfra-tools.js.map +1 -1
- package/dist/core/tool-schemas/shared-schemas.d.ts +72 -4
- package/dist/core/tool-schemas/shared-schemas.d.ts.map +1 -1
- package/dist/core/tool-schemas/shared-schemas.js +29 -3
- package/dist/core/tool-schemas/shared-schemas.js.map +1 -1
- package/dist/core/tool-schemas/system-object-tools.d.ts +93 -4
- package/dist/core/tool-schemas/system-object-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/system-object-tools.js +13 -6
- package/dist/core/tool-schemas/system-object-tools.js.map +1 -1
- package/dist/docs/isml/isprint.md +1 -1
- package/dist/docs/isml/isredirect.md +1 -1
- package/dist/docs/isml/isremove.md +1 -1
- package/dist/docs/isml/isreplace.md +1 -1
- package/dist/docs/isml/isscript.md +1 -1
- package/dist/main.js +18 -33
- package/dist/main.js.map +1 -1
- package/dist/tool-configs/agent-instructions-tool-config.d.ts +1 -1
- package/dist/tool-configs/agent-instructions-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/agent-instructions-tool-config.js +0 -33
- package/dist/tool-configs/agent-instructions-tool-config.js.map +1 -1
- package/dist/tool-configs/cartridge-tool-config.d.ts +1 -1
- package/dist/tool-configs/cartridge-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/cartridge-tool-config.js +3 -5
- package/dist/tool-configs/cartridge-tool-config.js.map +1 -1
- package/dist/tool-configs/code-version-tool-config.d.ts +1 -1
- package/dist/tool-configs/code-version-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/code-version-tool-config.js +0 -4
- package/dist/tool-configs/code-version-tool-config.js.map +1 -1
- package/dist/tool-configs/docs-tool-config.d.ts +1 -1
- package/dist/tool-configs/docs-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/docs-tool-config.js +0 -13
- package/dist/tool-configs/docs-tool-config.js.map +1 -1
- package/dist/tool-configs/isml-tool-config.d.ts +1 -1
- package/dist/tool-configs/isml-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/isml-tool-config.js +0 -10
- package/dist/tool-configs/isml-tool-config.js.map +1 -1
- package/dist/tool-configs/job-log-tool-config.d.ts +1 -1
- package/dist/tool-configs/job-log-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/job-log-tool-config.js +1 -21
- package/dist/tool-configs/job-log-tool-config.js.map +1 -1
- package/dist/tool-configs/log-tool-config.d.ts +1 -1
- package/dist/tool-configs/log-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/log-tool-config.js +6 -16
- package/dist/tool-configs/log-tool-config.js.map +1 -1
- package/dist/tool-configs/script-debugger-tool-config.d.ts +1 -1
- package/dist/tool-configs/script-debugger-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/script-debugger-tool-config.js +0 -8
- package/dist/tool-configs/script-debugger-tool-config.js.map +1 -1
- package/dist/tool-configs/sfra-tool-config.d.ts +1 -1
- package/dist/tool-configs/sfra-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/sfra-tool-config.js +0 -10
- package/dist/tool-configs/sfra-tool-config.js.map +1 -1
- package/dist/tool-configs/system-object-tool-config.d.ts +1 -1
- package/dist/tool-configs/system-object-tool-config.d.ts.map +1 -1
- package/dist/tool-configs/system-object-tool-config.js +14 -24
- package/dist/tool-configs/system-object-tool-config.js.map +1 -1
- package/dist/types/ocapi-search.d.ts +50 -0
- package/dist/types/ocapi-search.d.ts.map +1 -0
- package/dist/types/ocapi-search.js +7 -0
- package/dist/types/ocapi-search.js.map +1 -0
- package/dist/types/types.d.ts +4 -4
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils/abort-utils.d.ts +18 -0
- package/dist/utils/abort-utils.d.ts.map +1 -0
- package/dist/utils/abort-utils.js +60 -0
- package/dist/utils/abort-utils.js.map +1 -0
- package/dist/utils/cache.d.ts +7 -7
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/category-utils.d.ts +0 -10
- package/dist/utils/category-utils.d.ts.map +1 -1
- package/dist/utils/category-utils.js +0 -12
- package/dist/utils/category-utils.js.map +1 -1
- package/dist/utils/log-tool-constants.d.ts +3 -4
- package/dist/utils/log-tool-constants.d.ts.map +1 -1
- package/dist/utils/log-tool-constants.js +2 -13
- package/dist/utils/log-tool-constants.js.map +1 -1
- package/dist/utils/logger.d.ts +20 -7
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +72 -11
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/query-builder.d.ts +2 -5
- package/dist/utils/query-builder.d.ts.map +1 -1
- package/dist/utils/query-builder.js +1 -4
- package/dist/utils/query-builder.js.map +1 -1
- package/dist/utils/validator.d.ts +5 -3
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +20 -14
- package/dist/utils/validator.js.map +1 -1
- package/package.json +14 -7
- package/dist/clients/docs/index.d.ts +0 -10
- package/dist/clients/docs/index.d.ts.map +0 -1
- package/dist/clients/docs/index.js +0 -10
- package/dist/clients/docs/index.js.map +0 -1
- package/dist/constants/index.d.ts +0 -1
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js +0 -3
- package/dist/constants/index.js.map +0 -1
- package/dist/utils/path-validation.d.ts +0 -40
- package/dist/utils/path-validation.d.ts.map +0 -1
- package/dist/utils/path-validation.js +0 -84
- package/dist/utils/path-validation.js.map +0 -1
package/dist/utils/logger.js
CHANGED
|
@@ -19,15 +19,26 @@
|
|
|
19
19
|
* To find your log directory, use `Logger.getInstance().getLogDirectory()` or check
|
|
20
20
|
* the debug logs which show the directory path during initialization.
|
|
21
21
|
*/
|
|
22
|
-
import { appendFileSync, existsSync, mkdirSync } from 'fs';
|
|
22
|
+
import { appendFileSync, existsSync, mkdirSync, promises as fs } from 'fs';
|
|
23
23
|
import { join } from 'path';
|
|
24
24
|
import { tmpdir } from 'os';
|
|
25
|
+
import { inspect } from 'util';
|
|
25
26
|
export class Logger {
|
|
26
27
|
context;
|
|
27
28
|
enableTimestamp;
|
|
28
29
|
debugEnabled;
|
|
29
30
|
logDir;
|
|
31
|
+
writeQueue = Promise.resolve();
|
|
32
|
+
pendingWriteCount = 0;
|
|
33
|
+
droppedLogCount = 0;
|
|
34
|
+
useSyncWrites;
|
|
30
35
|
static instance = null;
|
|
36
|
+
static MAX_PENDING_WRITES = 5000;
|
|
37
|
+
static DROP_NOTICE_INTERVAL = 100;
|
|
38
|
+
static shouldUseSyncWrites(customLogDir) {
|
|
39
|
+
// Synchronous writes are only needed for deterministic unit tests.
|
|
40
|
+
return customLogDir !== undefined && process.env.NODE_ENV === 'test';
|
|
41
|
+
}
|
|
31
42
|
/**
|
|
32
43
|
* Create a new Logger instance
|
|
33
44
|
* @param context The context/component name for this logger
|
|
@@ -41,6 +52,8 @@ export class Logger {
|
|
|
41
52
|
this.debugEnabled = debugEnabled;
|
|
42
53
|
// Set up log directory - use custom directory for testing or default for production
|
|
43
54
|
this.logDir = customLogDir ?? join(tmpdir(), 'sfcc-mcp-logs');
|
|
55
|
+
// Only tests should force sync writes; runtime must stay non-blocking.
|
|
56
|
+
this.useSyncWrites = Logger.shouldUseSyncWrites(customLogDir);
|
|
44
57
|
if (!existsSync(this.logDir)) {
|
|
45
58
|
mkdirSync(this.logDir, { recursive: true });
|
|
46
59
|
}
|
|
@@ -114,22 +127,64 @@ export class Logger {
|
|
|
114
127
|
* Write log message to appropriate log file
|
|
115
128
|
*/
|
|
116
129
|
writeLog(level, message, ...args) {
|
|
130
|
+
if (!this.useSyncWrites && this.pendingWriteCount >= Logger.MAX_PENDING_WRITES) {
|
|
131
|
+
this.droppedLogCount++;
|
|
132
|
+
// Avoid stderr spam while still surfacing sustained backpressure.
|
|
133
|
+
if (this.droppedLogCount % Logger.DROP_NOTICE_INTERVAL === 0) {
|
|
134
|
+
process.stderr.write(`[LOGGER WARN] Dropped ${this.droppedLogCount} log entries due to write backpressure\n`);
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
117
138
|
const formattedMessage = this.formatMessage(message);
|
|
118
|
-
const
|
|
139
|
+
const serializedArgs = args.map(arg => this.serializeArg(arg)).join(' ');
|
|
140
|
+
const rawFullMessage = serializedArgs.length > 0
|
|
141
|
+
? `${formattedMessage} ${serializedArgs}`
|
|
142
|
+
: formattedMessage;
|
|
119
143
|
// Apply sensitive data masking before writing to log
|
|
120
144
|
const fullMessage = this.maskSensitiveData(rawFullMessage);
|
|
121
145
|
// Always write to log files
|
|
122
146
|
const logFile = join(this.logDir, `sfcc-mcp-${level}.log`);
|
|
123
147
|
const logEntry = `${fullMessage}\n`;
|
|
148
|
+
if (this.useSyncWrites) {
|
|
149
|
+
try {
|
|
150
|
+
appendFileSync(logFile, logEntry, 'utf8');
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
this.handleWriteFailure(level, logEntry, error);
|
|
154
|
+
}
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
this.pendingWriteCount++;
|
|
158
|
+
this.writeQueue = this.writeQueue
|
|
159
|
+
.then(async () => {
|
|
160
|
+
await fs.appendFile(logFile, logEntry, 'utf8');
|
|
161
|
+
})
|
|
162
|
+
.catch((error) => {
|
|
163
|
+
this.handleWriteFailure(level, logEntry, error);
|
|
164
|
+
})
|
|
165
|
+
.finally(() => {
|
|
166
|
+
this.pendingWriteCount = Math.max(0, this.pendingWriteCount - 1);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
serializeArg(value, pretty = true) {
|
|
170
|
+
if (typeof value === 'string') {
|
|
171
|
+
return value;
|
|
172
|
+
}
|
|
173
|
+
if (typeof value !== 'object' || value === null) {
|
|
174
|
+
return String(value);
|
|
175
|
+
}
|
|
124
176
|
try {
|
|
125
|
-
|
|
177
|
+
return pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value);
|
|
126
178
|
}
|
|
127
|
-
catch
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
179
|
+
catch {
|
|
180
|
+
return inspect(value, { depth: 4, breakLength: 120 });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
handleWriteFailure(level, logEntry, error) {
|
|
184
|
+
// Fallback: if file logging fails, try stderr for critical errors only
|
|
185
|
+
if (level === 'error') {
|
|
186
|
+
process.stderr.write(`[LOGGER ERROR] Could not write to log file: ${String(error)}\n`);
|
|
187
|
+
process.stderr.write(logEntry);
|
|
133
188
|
}
|
|
134
189
|
}
|
|
135
190
|
/**
|
|
@@ -181,7 +236,7 @@ export class Logger {
|
|
|
181
236
|
*/
|
|
182
237
|
methodEntry(methodName, params) {
|
|
183
238
|
if (this.debugEnabled) {
|
|
184
|
-
const paramStr = params ? ` with params: ${
|
|
239
|
+
const paramStr = params ? ` with params: ${this.serializeArg(params, false)}` : '';
|
|
185
240
|
this.debug(`Entering method: ${methodName}${paramStr}`);
|
|
186
241
|
}
|
|
187
242
|
}
|
|
@@ -192,7 +247,7 @@ export class Logger {
|
|
|
192
247
|
*/
|
|
193
248
|
methodExit(methodName, result) {
|
|
194
249
|
if (this.debugEnabled) {
|
|
195
|
-
const resultStr = result !== undefined ? ` with result: ${
|
|
250
|
+
const resultStr = result !== undefined ? ` with result: ${this.serializeArg(result, false)}` : '';
|
|
196
251
|
this.debug(`Exiting method: ${methodName}${resultStr}`);
|
|
197
252
|
}
|
|
198
253
|
}
|
|
@@ -222,6 +277,12 @@ export class Logger {
|
|
|
222
277
|
setDebugEnabled(enabled) {
|
|
223
278
|
this.debugEnabled = enabled;
|
|
224
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
* Wait for pending asynchronous log writes to complete.
|
|
282
|
+
*/
|
|
283
|
+
async flush() {
|
|
284
|
+
await this.writeQueue;
|
|
285
|
+
}
|
|
225
286
|
/**
|
|
226
287
|
* Get the current log directory
|
|
227
288
|
*/
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* This module provides utilities for building query strings and handling URL parameters
|
|
5
5
|
* for SFCC API requests with proper encoding and array handling.
|
|
6
6
|
*/
|
|
7
|
-
/**
|
|
8
|
-
* Query parameter builder for SFCC APIs
|
|
9
|
-
*/
|
|
10
7
|
export declare class QueryBuilder {
|
|
11
8
|
private params;
|
|
12
9
|
constructor();
|
|
@@ -21,7 +18,7 @@ export declare class QueryBuilder {
|
|
|
21
18
|
/**
|
|
22
19
|
* Add multiple parameters from an object
|
|
23
20
|
*/
|
|
24
|
-
addFromObject(params:
|
|
21
|
+
addFromObject<T extends object>(params: T): QueryBuilder;
|
|
25
22
|
/**
|
|
26
23
|
* Build the final query string
|
|
27
24
|
*/
|
|
@@ -33,6 +30,6 @@ export declare class QueryBuilder {
|
|
|
33
30
|
/**
|
|
34
31
|
* Static method to build query string from object
|
|
35
32
|
*/
|
|
36
|
-
static fromObject(params:
|
|
33
|
+
static fromObject<T extends object>(params: T): string;
|
|
37
34
|
}
|
|
38
35
|
//# sourceMappingURL=query-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/utils/query-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/utils/query-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAkB;;IAMhC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY;IAOhE;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,YAAY;IAgBhE;;OAEG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,YAAY;IAaxD;;OAEG;IACH,KAAK,IAAI,MAAM;IAIf;;OAEG;IACH,KAAK,IAAI,YAAY;IAKrB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM;CAGvD"}
|
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* This module provides utilities for building query strings and handling URL parameters
|
|
5
5
|
* for SFCC API requests with proper encoding and array handling.
|
|
6
6
|
*/
|
|
7
|
-
/**
|
|
8
|
-
* Query parameter builder for SFCC APIs
|
|
9
|
-
*/
|
|
10
7
|
export class QueryBuilder {
|
|
11
8
|
params;
|
|
12
9
|
constructor() {
|
|
@@ -47,7 +44,7 @@ export class QueryBuilder {
|
|
|
47
44
|
if (Array.isArray(value)) {
|
|
48
45
|
this.addArray(key, value);
|
|
49
46
|
}
|
|
50
|
-
else {
|
|
47
|
+
else if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
51
48
|
this.add(key, value);
|
|
52
49
|
}
|
|
53
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/utils/query-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/utils/query-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,OAAO,YAAY;IACf,MAAM,CAAkB;IAEhC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,GAAW,EAAE,KAAgC;QAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,GAAW,EAAE,MAA2B;QAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,kEAAkE;YAClE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,aAAa,CAAmB,MAAS;QACvC,MAAM,CAAC,OAAO,CAAC,MAAyC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACjF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC5B,CAAC;qBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;oBAChG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAmB,MAAS;QAC3C,OAAO,IAAI,YAAY,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* Custom validation error class
|
|
9
9
|
*/
|
|
10
10
|
export declare class ValidationError extends Error {
|
|
11
|
-
|
|
11
|
+
readonly code: string;
|
|
12
|
+
readonly details?: unknown | undefined;
|
|
13
|
+
constructor(message: string, code?: string, details?: unknown | undefined);
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Valid instance types for SFCC site preferences
|
|
@@ -22,7 +24,7 @@ export declare class Validator {
|
|
|
22
24
|
/**
|
|
23
25
|
* Validate that required fields are present and not empty
|
|
24
26
|
*/
|
|
25
|
-
static validateRequired(params: Record<string,
|
|
27
|
+
static validateRequired(params: Record<string, unknown>, requiredFields: string[]): void;
|
|
26
28
|
/**
|
|
27
29
|
* Validate instance type for site preferences
|
|
28
30
|
*/
|
|
@@ -42,7 +44,7 @@ export declare class Validator {
|
|
|
42
44
|
/**
|
|
43
45
|
* Validate search request structure
|
|
44
46
|
*/
|
|
45
|
-
static validateSearchRequest(searchRequest:
|
|
47
|
+
static validateSearchRequest(searchRequest: unknown): void;
|
|
46
48
|
}
|
|
47
49
|
export {};
|
|
48
50
|
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,IAAI,EAAE,MAAM;aACZ,OAAO,CAAC,EAAE,OAAO;gBAFjC,OAAO,EAAE,MAAM,EACC,IAAI,GAAE,MAA2B,EACjC,OAAO,CAAC,EAAE,OAAO,YAAA;CAKpC;AAED;;GAEG;AACH,QAAA,MAAM,oBAAoB,8DAA+D,CAAC;AAC1F,MAAM,MAAM,YAAY,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAE/D;;GAEG;AACH,qBAAa,SAAS;IACpB;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI;IAexF;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY;IAS/D;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAMrE;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAWnD;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;CAwE3D"}
|
package/dist/utils/validator.js
CHANGED
|
@@ -8,8 +8,12 @@
|
|
|
8
8
|
* Custom validation error class
|
|
9
9
|
*/
|
|
10
10
|
export class ValidationError extends Error {
|
|
11
|
-
|
|
11
|
+
code;
|
|
12
|
+
details;
|
|
13
|
+
constructor(message, code = 'VALIDATION_ERROR', details) {
|
|
12
14
|
super(message);
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.details = details;
|
|
13
17
|
this.name = 'ValidationError';
|
|
14
18
|
}
|
|
15
19
|
}
|
|
@@ -78,9 +82,10 @@ export class Validator {
|
|
|
78
82
|
if (!searchRequest || typeof searchRequest !== 'object') {
|
|
79
83
|
throw new ValidationError('Search request must be a valid object');
|
|
80
84
|
}
|
|
85
|
+
const request = searchRequest;
|
|
81
86
|
// Validate query structure if present
|
|
82
|
-
if (
|
|
83
|
-
const query =
|
|
87
|
+
if (request.query && typeof request.query === 'object') {
|
|
88
|
+
const query = request.query;
|
|
84
89
|
// Check that at least one query type is specified
|
|
85
90
|
const queryTypes = ['text_query', 'term_query', 'filtered_query', 'bool_query', 'match_all_query'];
|
|
86
91
|
const hasValidQuery = queryTypes.some(type => query[type]);
|
|
@@ -88,7 +93,7 @@ export class Validator {
|
|
|
88
93
|
throw new ValidationError(`Search query must contain at least one of: ${queryTypes.join(', ')}`);
|
|
89
94
|
}
|
|
90
95
|
// Validate text_query structure
|
|
91
|
-
if (query.text_query) {
|
|
96
|
+
if (query.text_query && typeof query.text_query === 'object') {
|
|
92
97
|
const textQuery = query.text_query;
|
|
93
98
|
if (!textQuery.fields || !Array.isArray(textQuery.fields) || textQuery.fields.length === 0) {
|
|
94
99
|
throw new ValidationError('text_query.fields must be a non-empty array');
|
|
@@ -98,7 +103,7 @@ export class Validator {
|
|
|
98
103
|
}
|
|
99
104
|
}
|
|
100
105
|
// Validate term_query structure
|
|
101
|
-
if (query.term_query) {
|
|
106
|
+
if (query.term_query && typeof query.term_query === 'object') {
|
|
102
107
|
const termQuery = query.term_query;
|
|
103
108
|
if (!termQuery.fields || !Array.isArray(termQuery.fields) || termQuery.fields.length === 0) {
|
|
104
109
|
throw new ValidationError('term_query.fields must be a non-empty array');
|
|
@@ -112,25 +117,26 @@ export class Validator {
|
|
|
112
117
|
}
|
|
113
118
|
}
|
|
114
119
|
// Validate sorts structure if present
|
|
115
|
-
if (
|
|
116
|
-
if (!Array.isArray(
|
|
120
|
+
if (request.sorts !== undefined) {
|
|
121
|
+
if (!Array.isArray(request.sorts)) {
|
|
117
122
|
throw new ValidationError('sorts must be an array');
|
|
118
123
|
}
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
request.sorts.forEach((sort, index) => {
|
|
125
|
+
const sortObject = sort;
|
|
126
|
+
if (!sortObject.field || typeof sortObject.field !== 'string') {
|
|
121
127
|
throw new ValidationError(`sorts[${index}].field must be a non-empty string`);
|
|
122
128
|
}
|
|
123
|
-
if (
|
|
129
|
+
if (sortObject.sort_order && (sortObject.sort_order !== 'asc' && sortObject.sort_order !== 'desc')) {
|
|
124
130
|
throw new ValidationError(`sorts[${index}].sort_order must be either 'asc' or 'desc'`);
|
|
125
131
|
}
|
|
126
132
|
});
|
|
127
133
|
}
|
|
128
134
|
// Validate pagination parameters
|
|
129
|
-
if (
|
|
130
|
-
Validator.validatePositiveNumber(
|
|
135
|
+
if (typeof request.start === 'number') {
|
|
136
|
+
Validator.validatePositiveNumber(request.start, 'start');
|
|
131
137
|
}
|
|
132
|
-
if (
|
|
133
|
-
Validator.validatePositiveNumber(
|
|
138
|
+
if (typeof request.count === 'number') {
|
|
139
|
+
Validator.validatePositiveNumber(request.count, 'count');
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sfcc-dev-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.22",
|
|
4
4
|
"description": "MCP server for Salesforce B2C Commerce Cloud development assistance including logs, debugging, and development tools",
|
|
5
5
|
"mcpName": "io.github.taurgis/sfcc-dev-mcp",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -35,18 +35,22 @@
|
|
|
35
35
|
"docs:build": "npm --prefix docs-site-v2 run build",
|
|
36
36
|
"docs:preview": "npm --prefix docs-site-v2 run preview",
|
|
37
37
|
"test": "npm run test:all",
|
|
38
|
+
"test:unit": "jest",
|
|
38
39
|
"test:watch": "jest --watch",
|
|
39
40
|
"test:coverage": "jest --coverage",
|
|
40
41
|
"test:mcp:yaml": "aegis 'tests/mcp/yaml/*.docs-only.test.mcp.yml' --config './aegis.config.docs-only.json'",
|
|
41
42
|
"test:mcp:yaml:full": "aegis 'tests/mcp/yaml/*.full-mode.test.mcp.yml' --config './aegis.config.with-dw.json'",
|
|
42
43
|
"test:mcp:node": "node --test tests/mcp/node/*.programmatic.test.js",
|
|
43
|
-
"test:mcp:all": "npm run test:mcp:yaml
|
|
44
|
+
"test:mcp:all": "npm run test:mcp:yaml & p1=$!; npm run test:mcp:yaml:full & p2=$!; wait $p1; s1=$?; wait $p2; s2=$?; [ $s1 -eq 0 ] && [ $s2 -eq 0 ] && npm run test:mcp:node",
|
|
44
45
|
"test:mcp:ci": "npm run test:mcp:yaml -- --json && npm run test:mcp:yaml:full -- --json && npm run test:mcp:node",
|
|
45
|
-
"test:
|
|
46
|
+
"test:mcp:published-npx": "bash ./scripts/test-published-npx.sh",
|
|
47
|
+
"test:all": "npm run test:unit & p1=$!; npm run test:mock-server:setup & p2=$!; wait $p1; s1=$?; wait $p2; s2=$?; [ $s1 -eq 0 ] && [ $s2 -eq 0 ] && npm run test:mcp:all",
|
|
46
48
|
"test:mock-server:setup": "cd tests/servers/sfcc-mock-server && npm install && npm run setup",
|
|
47
49
|
"test:mock-server:start": "cd tests/servers/sfcc-mock-server && npm start",
|
|
48
50
|
"test:mock-server": "jest --testPathPatterns=sfcc-mock-server",
|
|
49
51
|
"validate:server-json": "node scripts/validate-server-json.js",
|
|
52
|
+
"validate:tools-sync": "node scripts/validate-tools-sync.js",
|
|
53
|
+
"validate:skills-sync": "node scripts/validate-skills-sync.js",
|
|
50
54
|
"lint": "eslint .",
|
|
51
55
|
"lint:fix": "eslint . --fix",
|
|
52
56
|
"lint:check": "eslint . --max-warnings 0",
|
|
@@ -74,20 +78,23 @@
|
|
|
74
78
|
"@modelcontextprotocol/sdk": "1.26.0",
|
|
75
79
|
"webdav": "5.9.0"
|
|
76
80
|
},
|
|
81
|
+
"overrides": {
|
|
82
|
+
"minimatch": "10.2.2"
|
|
83
|
+
},
|
|
77
84
|
"devDependencies": {
|
|
78
|
-
"@eslint/js": "
|
|
85
|
+
"@eslint/js": "10.0.1",
|
|
79
86
|
"@types/eslint": "9.6.1",
|
|
80
87
|
"@types/jest": "30.0.0",
|
|
81
|
-
"@types/node": "25.0
|
|
88
|
+
"@types/node": "25.3.0",
|
|
82
89
|
"ajv": "8.18.0",
|
|
83
90
|
"ajv-formats": "3.0.1",
|
|
84
|
-
"eslint": "
|
|
91
|
+
"eslint": "10.0.2",
|
|
85
92
|
"husky": "9.1.7",
|
|
86
93
|
"jest": "30.2.0",
|
|
87
94
|
"mcp-aegis": "1.0.18",
|
|
88
95
|
"ts-jest": "29.4.6",
|
|
89
96
|
"tsx": "4.21.0",
|
|
90
97
|
"typescript": "5.9.3",
|
|
91
|
-
"typescript-eslint": "8.
|
|
98
|
+
"typescript-eslint": "8.56.1"
|
|
92
99
|
}
|
|
93
100
|
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Documentation Module Exports
|
|
3
|
-
*
|
|
4
|
-
* Exports for the refactored documentation client modules
|
|
5
|
-
*/
|
|
6
|
-
export { DocumentationScanner, SFCCClassInfo } from './documentation-scanner.js';
|
|
7
|
-
export { ClassContentParser, SFCCClassDetails, SFCCMethod, SFCCProperty, SFCCConstant, } from './class-content-parser.js';
|
|
8
|
-
export { ClassNameResolver } from './class-name-resolver.js';
|
|
9
|
-
export { ReferencedTypesExtractor } from './referenced-types-extractor.js';
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/docs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Documentation Module Exports
|
|
3
|
-
*
|
|
4
|
-
* Exports for the refactored documentation client modules
|
|
5
|
-
*/
|
|
6
|
-
export { DocumentationScanner } from './documentation-scanner.js';
|
|
7
|
-
export { ClassContentParser, } from './class-content-parser.js';
|
|
8
|
-
export { ClassNameResolver } from './class-name-resolver.js';
|
|
9
|
-
export { ReferencedTypesExtractor } from './referenced-types-extractor.js';
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clients/docs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAiB,MAAM,4BAA4B,CAAC;AACjF,OAAO,EACL,kBAAkB,GAKnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":""}
|
package/dist/constants/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":";AAAA,sFAAsF"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path Validation Utilities
|
|
3
|
-
*
|
|
4
|
-
* Provides secure path validation for file operations.
|
|
5
|
-
* Prevents path traversal attacks and validates file names.
|
|
6
|
-
*/
|
|
7
|
-
export interface PathValidationOptions {
|
|
8
|
-
/** Allowed file extensions (e.g., ['.md', '.json']) */
|
|
9
|
-
allowedExtensions?: string[];
|
|
10
|
-
/** Whether to normalize the name to lowercase */
|
|
11
|
-
normalizeToLowerCase?: boolean;
|
|
12
|
-
}
|
|
13
|
-
export declare class PathValidationError extends Error {
|
|
14
|
-
readonly code: string;
|
|
15
|
-
constructor(message: string, code?: string);
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Validate a file/document name for security issues
|
|
19
|
-
* @param name - The name to validate
|
|
20
|
-
* @param fieldName - Human-readable field name for error messages
|
|
21
|
-
* @throws PathValidationError if validation fails
|
|
22
|
-
*/
|
|
23
|
-
export declare function validateFileName(name: string, fieldName?: string): void;
|
|
24
|
-
/**
|
|
25
|
-
* Construct and validate a file path within a base directory
|
|
26
|
-
* @param basePath - The base directory path
|
|
27
|
-
* @param fileName - The file name (without extension)
|
|
28
|
-
* @param options - Validation options
|
|
29
|
-
* @returns The validated, resolved file path
|
|
30
|
-
* @throws PathValidationError if validation fails
|
|
31
|
-
*/
|
|
32
|
-
export declare function constructValidatedPath(basePath: string, fileName: string, options?: PathValidationOptions): string;
|
|
33
|
-
/**
|
|
34
|
-
* Validate binary content
|
|
35
|
-
* @param content - The content to validate
|
|
36
|
-
* @param fieldName - Human-readable field name for error messages
|
|
37
|
-
* @throws PathValidationError if content appears to be binary
|
|
38
|
-
*/
|
|
39
|
-
export declare function validateTextContent(content: string, fieldName?: string): void;
|
|
40
|
-
//# sourceMappingURL=path-validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"path-validation.d.ts","sourceRoot":"","sources":["../../src/utils/path-validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;aACC,IAAI,EAAE,MAAM;gBAA7C,OAAO,EAAE,MAAM,EAAkB,IAAI,GAAE,MAAgC;CAIpF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,GAAG,IAAI,CAmB/E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAkCR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,IAAI,CAQxF"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Path Validation Utilities
|
|
3
|
-
*
|
|
4
|
-
* Provides secure path validation for file operations.
|
|
5
|
-
* Prevents path traversal attacks and validates file names.
|
|
6
|
-
*/
|
|
7
|
-
import * as path from 'path';
|
|
8
|
-
export class PathValidationError extends Error {
|
|
9
|
-
code;
|
|
10
|
-
constructor(message, code = 'PATH_VALIDATION_ERROR') {
|
|
11
|
-
super(message);
|
|
12
|
-
this.code = code;
|
|
13
|
-
this.name = 'PathValidationError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Validate a file/document name for security issues
|
|
18
|
-
* @param name - The name to validate
|
|
19
|
-
* @param fieldName - Human-readable field name for error messages
|
|
20
|
-
* @throws PathValidationError if validation fails
|
|
21
|
-
*/
|
|
22
|
-
export function validateFileName(name, fieldName = 'name') {
|
|
23
|
-
if (!name || typeof name !== 'string') {
|
|
24
|
-
throw new PathValidationError(`Invalid ${fieldName}: must be a non-empty string`, 'INVALID_TYPE');
|
|
25
|
-
}
|
|
26
|
-
// Prevent null bytes
|
|
27
|
-
if (name.includes('\0') || name.includes('\x00')) {
|
|
28
|
-
throw new PathValidationError(`Invalid ${fieldName}: contains null bytes`, 'NULL_BYTES');
|
|
29
|
-
}
|
|
30
|
-
// Prevent path traversal sequences
|
|
31
|
-
if (name.includes('..') || name.includes('/') || name.includes('\\')) {
|
|
32
|
-
throw new PathValidationError(`Invalid ${fieldName}: contains path traversal sequences`, 'PATH_TRAVERSAL');
|
|
33
|
-
}
|
|
34
|
-
// Only allow safe characters
|
|
35
|
-
if (!/^[a-zA-Z0-9_-]+$/.test(name)) {
|
|
36
|
-
throw new PathValidationError(`Invalid ${fieldName}: contains invalid characters`, 'INVALID_CHARACTERS');
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Construct and validate a file path within a base directory
|
|
41
|
-
* @param basePath - The base directory path
|
|
42
|
-
* @param fileName - The file name (without extension)
|
|
43
|
-
* @param options - Validation options
|
|
44
|
-
* @returns The validated, resolved file path
|
|
45
|
-
* @throws PathValidationError if validation fails
|
|
46
|
-
*/
|
|
47
|
-
export function constructValidatedPath(basePath, fileName, options = {}) {
|
|
48
|
-
const { allowedExtensions = ['.md'], normalizeToLowerCase = true } = options;
|
|
49
|
-
// Validate the file name first
|
|
50
|
-
validateFileName(fileName, 'file name');
|
|
51
|
-
// Normalize if requested
|
|
52
|
-
const normalizedName = normalizeToLowerCase ? fileName.toLowerCase() : fileName;
|
|
53
|
-
// Determine extension (use first allowed extension by default)
|
|
54
|
-
const extension = allowedExtensions[0] ?? '.md';
|
|
55
|
-
// Construct the path
|
|
56
|
-
const filePath = path.join(basePath, `${normalizedName}${extension}`);
|
|
57
|
-
const resolvedPath = path.resolve(filePath);
|
|
58
|
-
const resolvedBasePath = path.resolve(basePath);
|
|
59
|
-
// Ensure the path is within the base directory
|
|
60
|
-
if (!resolvedPath.startsWith(resolvedBasePath)) {
|
|
61
|
-
throw new PathValidationError('Invalid file name: path outside allowed directory', 'OUTSIDE_BASE_DIR');
|
|
62
|
-
}
|
|
63
|
-
// Ensure the file has the correct extension
|
|
64
|
-
const hasValidExtension = allowedExtensions.some(ext => resolvedPath.toLowerCase().endsWith(ext.toLowerCase()));
|
|
65
|
-
if (!hasValidExtension) {
|
|
66
|
-
throw new PathValidationError(`Invalid file name: must reference a ${allowedExtensions.join(' or ')} file`, 'INVALID_EXTENSION');
|
|
67
|
-
}
|
|
68
|
-
return resolvedPath;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Validate binary content
|
|
72
|
-
* @param content - The content to validate
|
|
73
|
-
* @param fieldName - Human-readable field name for error messages
|
|
74
|
-
* @throws PathValidationError if content appears to be binary
|
|
75
|
-
*/
|
|
76
|
-
export function validateTextContent(content, fieldName = 'content') {
|
|
77
|
-
if (!content.trim()) {
|
|
78
|
-
throw new PathValidationError(`Empty ${fieldName}`, 'EMPTY_CONTENT');
|
|
79
|
-
}
|
|
80
|
-
if (content.includes('\0')) {
|
|
81
|
-
throw new PathValidationError(`Invalid ${fieldName}: contains binary data`, 'BINARY_CONTENT');
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=path-validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"path-validation.js","sourceRoot":"","sources":["../../src/utils/path-validation.ts"],"names":[],"mappings":"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"}
|