sfcc-dev-mcp 1.0.21 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -4
- package/README.md +101 -31
- package/dist/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +1 -0
- 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 +30 -1
- package/dist/clients/script-debugger/script-debugger-client.d.ts.map +1 -1
- package/dist/clients/script-debugger/script-debugger-client.js +266 -132
- 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 +2 -0
- package/dist/config/configuration-factory.d.ts.map +1 -1
- package/dist/config/configuration-factory.js +30 -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 +25 -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 +12 -0
- package/dist/core/tool-schemas/script-debugger-tools.d.ts.map +1 -1
- package/dist/core/tool-schemas/script-debugger-tools.js +19 -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/dw_extensions.payments/SalesforcePaymentsMgr.md +52 -0
- package/dist/docs/dw_system/Request.md +4 -0
- package/dist/docs/dw_web/Cookie.md +54 -15
- 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 +1 -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 +13 -5
- 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 +66 -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 +1 -0
- 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 +23 -11
- 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/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.1.0",
|
|
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",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"start": "node dist/main.js",
|
|
27
27
|
"dev": "tsx src/main.ts",
|
|
28
28
|
"inspector": "npx @modelcontextprotocol/inspector node dist/main.js",
|
|
29
|
+
"changeset": "changeset",
|
|
29
30
|
"convert-docs": "node scripts/convert-docs.js",
|
|
30
31
|
"convert-docs:test": "node scripts/convert-docs.js --test",
|
|
31
32
|
"convert-docs:limit": "node scripts/convert-docs.js --limit 5",
|
|
@@ -34,19 +35,26 @@
|
|
|
34
35
|
"docs:dev": "npm --prefix docs-site-v2 run dev",
|
|
35
36
|
"docs:build": "npm --prefix docs-site-v2 run build",
|
|
36
37
|
"docs:preview": "npm --prefix docs-site-v2 run preview",
|
|
38
|
+
"release:status": "node scripts/release-status.js",
|
|
39
|
+
"version-packages": "changeset version && node scripts/sync-server-json-version.js && npm install --package-lock-only",
|
|
40
|
+
"ci:publish": "changeset publish",
|
|
37
41
|
"test": "npm run test:all",
|
|
42
|
+
"test:unit": "jest",
|
|
38
43
|
"test:watch": "jest --watch",
|
|
39
44
|
"test:coverage": "jest --coverage",
|
|
40
45
|
"test:mcp:yaml": "aegis 'tests/mcp/yaml/*.docs-only.test.mcp.yml' --config './aegis.config.docs-only.json'",
|
|
41
46
|
"test:mcp:yaml:full": "aegis 'tests/mcp/yaml/*.full-mode.test.mcp.yml' --config './aegis.config.with-dw.json'",
|
|
42
47
|
"test:mcp:node": "node --test tests/mcp/node/*.programmatic.test.js",
|
|
43
|
-
"test:mcp:all": "npm run test:mcp:yaml
|
|
48
|
+
"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
49
|
"test:mcp:ci": "npm run test:mcp:yaml -- --json && npm run test:mcp:yaml:full -- --json && npm run test:mcp:node",
|
|
45
|
-
"test:
|
|
50
|
+
"test:mcp:published-npx": "bash ./scripts/test-published-npx.sh",
|
|
51
|
+
"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
52
|
"test:mock-server:setup": "cd tests/servers/sfcc-mock-server && npm install && npm run setup",
|
|
47
53
|
"test:mock-server:start": "cd tests/servers/sfcc-mock-server && npm start",
|
|
48
54
|
"test:mock-server": "jest --testPathPatterns=sfcc-mock-server",
|
|
49
55
|
"validate:server-json": "node scripts/validate-server-json.js",
|
|
56
|
+
"validate:tools-sync": "node scripts/validate-tools-sync.js",
|
|
57
|
+
"validate:skills-sync": "node scripts/validate-skills-sync.js",
|
|
50
58
|
"lint": "eslint .",
|
|
51
59
|
"lint:fix": "eslint . --fix",
|
|
52
60
|
"lint:check": "eslint . --max-warnings 0",
|
|
@@ -71,23 +79,27 @@
|
|
|
71
79
|
},
|
|
72
80
|
"type": "module",
|
|
73
81
|
"dependencies": {
|
|
74
|
-
"@modelcontextprotocol/sdk": "1.
|
|
82
|
+
"@modelcontextprotocol/sdk": "1.29.0",
|
|
75
83
|
"webdav": "5.9.0"
|
|
76
84
|
},
|
|
85
|
+
"overrides": {
|
|
86
|
+
"minimatch": "10.2.5"
|
|
87
|
+
},
|
|
77
88
|
"devDependencies": {
|
|
78
|
-
"@
|
|
89
|
+
"@changesets/cli": "2.30.0",
|
|
90
|
+
"@eslint/js": "10.0.1",
|
|
79
91
|
"@types/eslint": "9.6.1",
|
|
80
92
|
"@types/jest": "30.0.0",
|
|
81
|
-
"@types/node": "25.
|
|
93
|
+
"@types/node": "25.5.2",
|
|
82
94
|
"ajv": "8.18.0",
|
|
83
95
|
"ajv-formats": "3.0.1",
|
|
84
|
-
"eslint": "
|
|
96
|
+
"eslint": "10.2.0",
|
|
85
97
|
"husky": "9.1.7",
|
|
86
|
-
"jest": "30.
|
|
98
|
+
"jest": "30.3.0",
|
|
87
99
|
"mcp-aegis": "1.0.18",
|
|
88
|
-
"ts-jest": "29.4.
|
|
100
|
+
"ts-jest": "29.4.9",
|
|
89
101
|
"tsx": "4.21.0",
|
|
90
|
-
"typescript": "
|
|
91
|
-
"typescript-eslint": "8.
|
|
102
|
+
"typescript": "6.0.2",
|
|
103
|
+
"typescript-eslint": "8.58.1"
|
|
92
104
|
}
|
|
93
105
|
}
|
|
@@ -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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"}
|