@slbdn/mcp-tester 1.4.0 → 1.4.1
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 +18 -0
- package/README.md +3 -3
- package/dist/utils/masking.d.ts +2 -2
- package/dist/utils/masking.d.ts.map +1 -1
- package/dist/utils/masking.js +57 -3
- package/dist/utils/masking.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.4.1] - 2026-07-02
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **`maskSecrets()` no longer throws on hostile objects** — objects with a non-function `toString` (e.g. `{ toString: false }`), non-function `valueOf`, non-function `Symbol.toPrimitive`, throwing coercion methods, or circular references previously crashed `String(input)` with `TypeError: Cannot convert object to primitive value`.
|
|
14
|
+
- Root cause: `String()` invokes `toString()`/`valueOf()`/`Symbol.toPrimitive`, but throws when those are present yet not callable.
|
|
15
|
+
- Since masking runs inside `ConsoleLogger.format()` on every log line, this could take down logging entirely.
|
|
16
|
+
- New internal `safeToString()` helper guards coercion with `typeof` checks and `try/catch`, falling back to `JSON.stringify` then `Object.prototype.toString.call()`.
|
|
17
|
+
- Found by property-based testing (`fc.anything()`); verified against 2000 randomized runs with 0 crashes.
|
|
18
|
+
- Added regression tests for hostile objects and circular references.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- **CI: bumped GitHub Actions to current versions** (fixes "Node 20 is being deprecated" warning):
|
|
22
|
+
- `actions/checkout` v3 → v5 (node16 → node24 runtime)
|
|
23
|
+
- `actions/setup-node` v3 → v5
|
|
24
|
+
- `codecov/codecov-action` v3/v4 → v5
|
|
25
|
+
- Replaced deprecated `actions/create-release@v1` with `gh release create`
|
|
26
|
+
- The deprecation warning was about the action runtime, not the test matrix.
|
|
27
|
+
|
|
10
28
|
## [1.4.0] - 2026-07-01
|
|
11
29
|
|
|
12
30
|
### Added
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/@slbdn/mcp-tester)
|
|
8
8
|
[](https://www.npmjs.com/package/@slbdn/mcp-tester)
|
|
9
|
-
[](https://nodejs.org)
|
|
10
10
|
[](https://opensource.org/licenses/MIT)
|
|
11
11
|
[](https://github.com/islobodan/mcp-tester/actions/workflows/test.yml)
|
|
12
12
|
[](https://github.com/islobodan/mcp-tester/actions/workflows/test.yml) <!-- statements/branches/functions/lines -->
|
|
@@ -106,7 +106,7 @@ The report includes collapsible test trees, timing per test, and failure details
|
|
|
106
106
|
npm install @slbdn/mcp-tester --save-dev
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
-
Requires **Node.js >=
|
|
109
|
+
Requires **Node.js >= 20**. See [Node.js Compatibility](./docs/nodejs-compatibility.md) for details.
|
|
110
110
|
|
|
111
111
|
## Quick Start
|
|
112
112
|
|
|
@@ -573,7 +573,7 @@ import { MCPClient } from './client/MCPClient.js';
|
|
|
573
573
|
### Tests Fail in CI
|
|
574
574
|
|
|
575
575
|
- Set `maxWorkers: 1` in Jest config (parallel workers can crash)
|
|
576
|
-
- Verify Node.js >=
|
|
576
|
+
- Verify Node.js >= 20
|
|
577
577
|
- Check that server paths are correct
|
|
578
578
|
|
|
579
579
|
### Debug Mode
|
package/dist/utils/masking.d.ts
CHANGED
|
@@ -39,8 +39,8 @@ export declare function maskValue(value: string, visibleChars?: number): string;
|
|
|
39
39
|
* Mask secrets in a string by applying all active secret patterns
|
|
40
40
|
* and masking values of known sensitive environment variable keys.
|
|
41
41
|
*
|
|
42
|
-
* @param input - The value to mask (any type — converted to string)
|
|
43
|
-
* @returns String with secrets replaced by masked versions
|
|
42
|
+
* @param input - The value to mask (any type — safely converted to string)
|
|
43
|
+
* @returns String with secrets replaced by masked versions. Never throws.
|
|
44
44
|
*/
|
|
45
45
|
export declare function maskSecrets(input: unknown): string;
|
|
46
46
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masking.d.ts","sourceRoot":"","sources":["../../src/utils/masking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;CACd;AAuFD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAAsB,GAAG,MAAM,CAOrF;
|
|
1
|
+
{"version":3,"file":"masking.d.ts","sourceRoot":"","sources":["../../src/utils/masking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;CACd;AAuFD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAAsB,GAAG,MAAM,CAOrF;AA2DD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA2BlD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiB,GAAG,IAAI,CAE/E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CAAC,MAAM,CAAC,CAEzD"}
|
package/dist/utils/masking.js
CHANGED
|
@@ -112,18 +112,72 @@ export function maskValue(value, visibleChars = VISIBLE_CHARS) {
|
|
|
112
112
|
const end = value.slice(-visibleChars);
|
|
113
113
|
return `${start}...${end}`;
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Safely convert any value to a string.
|
|
117
|
+
*
|
|
118
|
+
* Handles edge cases that `String()` chokes on:
|
|
119
|
+
* - Objects with a non-function `toString` (e.g. `{ toString: false }`)
|
|
120
|
+
* - Objects with a non-function `valueOf` or `Symbol.toPrimitive`
|
|
121
|
+
* - Circular references (falls back to a placeholder)
|
|
122
|
+
*
|
|
123
|
+
* @param value - Any value
|
|
124
|
+
* @returns A string representation that never throws
|
|
125
|
+
*/
|
|
126
|
+
function safeToString(value) {
|
|
127
|
+
if (value === null)
|
|
128
|
+
return 'null';
|
|
129
|
+
if (value === undefined)
|
|
130
|
+
return 'undefined';
|
|
131
|
+
const typeofValue = typeof value;
|
|
132
|
+
// Primitives and functions are safe
|
|
133
|
+
if (typeofValue === 'string' ||
|
|
134
|
+
typeofValue === 'number' ||
|
|
135
|
+
typeofValue === 'boolean' ||
|
|
136
|
+
typeofValue === 'bigint' ||
|
|
137
|
+
typeofValue === 'symbol' ||
|
|
138
|
+
typeofValue === 'function') {
|
|
139
|
+
return String(value);
|
|
140
|
+
}
|
|
141
|
+
// value is an object — its toString/valueOf/Symbol.toPrimitive may be
|
|
142
|
+
// non-functions or throw, so we guard the coercion.
|
|
143
|
+
try {
|
|
144
|
+
// Prefer Symbol.toPrimitive if present and callable
|
|
145
|
+
const toPrim = value[Symbol.toPrimitive];
|
|
146
|
+
if (typeof toPrim === 'function') {
|
|
147
|
+
return String(toPrim.call(value, 'string'));
|
|
148
|
+
}
|
|
149
|
+
const toString = value.toString;
|
|
150
|
+
if (typeof toString === 'function') {
|
|
151
|
+
return String(toString.call(value));
|
|
152
|
+
}
|
|
153
|
+
const valueOf = value.valueOf;
|
|
154
|
+
if (typeof valueOf === 'function') {
|
|
155
|
+
return String(valueOf.call(value));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// fall through to JSON / placeholder
|
|
160
|
+
}
|
|
161
|
+
// Last resort: JSON (handles plain objects & arrays); ignore cycles
|
|
162
|
+
try {
|
|
163
|
+
return JSON.stringify(value);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return Object.prototype.toString.call(value);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
115
169
|
/**
|
|
116
170
|
* Mask secrets in a string by applying all active secret patterns
|
|
117
171
|
* and masking values of known sensitive environment variable keys.
|
|
118
172
|
*
|
|
119
|
-
* @param input - The value to mask (any type — converted to string)
|
|
120
|
-
* @returns String with secrets replaced by masked versions
|
|
173
|
+
* @param input - The value to mask (any type — safely converted to string)
|
|
174
|
+
* @returns String with secrets replaced by masked versions. Never throws.
|
|
121
175
|
*/
|
|
122
176
|
export function maskSecrets(input) {
|
|
123
177
|
if (input === null || input === undefined) {
|
|
124
178
|
return String(input);
|
|
125
179
|
}
|
|
126
|
-
let result =
|
|
180
|
+
let result = safeToString(input);
|
|
127
181
|
// 1. First mask values of known sensitive environment variable keys
|
|
128
182
|
// Matches: KEY=value, KEY="value", KEY: value, KEY: "value"
|
|
129
183
|
result = result.replace(/\b([A-Z_][A-Z0-9_]{2,})(\s*[:=]\s*)(["']?)([^\s"']{4,})\3/g, (_match, key, separator, quote, _value) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masking.js","sourceRoot":"","sources":["../../src/utils/masking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH;;;GAGG;AACH,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IACtD,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,cAAc;IACd,eAAe;IACf,YAAY;IACZ,eAAe;IACf,cAAc;IACd,OAAO;IACP,eAAe;IACf,eAAe;IACf,YAAY;IACZ,UAAU;IACV,UAAU;IACV,QAAQ;IACR,aAAa;IACb,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,QAAQ;IACR,aAAa;IACb,cAAc;IACd,WAAW;IACX,WAAW;IACX,mBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;IACnB,qBAAqB;IACrB,aAAa;IACb,gBAAgB;IAChB,gBAAgB;IAChB,mBAAmB;IACnB,cAAc;IACd,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,YAAY;CACb,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,uCAAuC,CAAC;AACjE,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAC9C,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAC9C,MAAM,YAAY,GAAG,iCAAiC,CAAC;AACvD,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAC7C,MAAM,SAAS,GAAG,oBAAoB,CAAC;AACvC,MAAM,eAAe,GAAG,qCAAqC,CAAC;AAC9D,MAAM,QAAQ,GACZ,qGAAqG,CAAC;AAExG;;GAEG;AACH,MAAM,uBAAuB,GAAoB;IAC/C,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,0BAA0B,EAAE;IAC/D,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE;IAChD,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAClD,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE;IAC/C,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;IACzC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;IACzC,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACrD,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;CAChD,CAAC;AAEF,sDAAsD;AACtD,IAAI,cAAc,GAAoB,CAAC,GAAG,uBAAuB,CAAC,CAAC;AAEnE,sEAAsE;AACtE,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,eAAuB,aAAa;IAC3E,IAAI,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IACvC,OAAO,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"masking.js","sourceRoot":"","sources":["../../src/utils/masking.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slbdn/mcp-tester",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "Minimal MCP client implementation for CI/CD testing of MCP servers",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"typescript": "^5.3.0"
|
|
101
101
|
},
|
|
102
102
|
"engines": {
|
|
103
|
-
"node": ">=
|
|
103
|
+
"node": ">=20"
|
|
104
104
|
},
|
|
105
105
|
"lint-staged": {
|
|
106
106
|
"src/**/*.ts": [
|