@appland/appmap 3.201.0 → 3.201.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/built/lib/sanitizeAppMap.js +36 -5
- package/built/lib/sanitizeAppMap.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [@appland/appmap-v3.201.2](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.201.1...@appland/appmap-v3.201.2) (2026-07-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **build-native:** switch pkg compression from Zstd to Brotli ([2e2b9b1](https://github.com/getappmap/appmap-js/commit/2e2b9b1466a6285cf656d05bd766e4de85ed46f0))
|
|
7
|
+
|
|
8
|
+
# [@appland/appmap-v3.201.1](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.201.0...@appland/appmap-v3.201.1) (2026-07-14)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **cli:** sanitize SQL in the class map, not just events ([9119b3d](https://github.com/getappmap/appmap-js/commit/9119b3df1c370004ed65a0c0f72149d972a8a66d))
|
|
14
|
+
|
|
1
15
|
# [@appland/appmap-v3.201.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.200.0...@appland/appmap-v3.201.0) (2026-07-11)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -24,7 +24,10 @@ exports.CLI_VERSION = require('../../package.json').version;
|
|
|
24
24
|
// Sanitization is positional, driven by the AppMap format: it touches only
|
|
25
25
|
// the fields defined to hold captured runtime data. Code object names,
|
|
26
26
|
// classes, paths, labels, and route templates are schema, not data, and are
|
|
27
|
-
// never modified
|
|
27
|
+
// never modified — with one exception: a `query` code object's name IS a SQL
|
|
28
|
+
// statement, literals included, so it is parameterized exactly like an event's
|
|
29
|
+
// sql_query (otherwise a literal that was scrubbed from the events would still
|
|
30
|
+
// survive in the class map).
|
|
28
31
|
//
|
|
29
32
|
// The per-file token namespace is deliberate: unlinkability across
|
|
30
33
|
// files/revisions is the anti-correlation guarantee, and (routes aside) values
|
|
@@ -199,7 +202,7 @@ const TOKEN_SCAN = /<(?:[a-z0-9]+:)?v(\d+)>/g;
|
|
|
199
202
|
// Labeled so appmap-review interprets any change to this boundary.
|
|
200
203
|
// @label security.sanitization
|
|
201
204
|
function sanitizeAppMap(appmap, masker = new ValueMasker()) {
|
|
202
|
-
var _a, _b, _c, _d;
|
|
205
|
+
var _a, _b, _c, _d, _e;
|
|
203
206
|
const prior = (_a = appmap.metadata) === null || _a === void 0 ? void 0 : _a.sanitized;
|
|
204
207
|
masker.recognizeTokens = Boolean(prior);
|
|
205
208
|
if (prior) {
|
|
@@ -209,13 +212,24 @@ function sanitizeAppMap(appmap, masker = new ValueMasker()) {
|
|
|
209
212
|
masker.reserveThrough(Number(match[1]));
|
|
210
213
|
}
|
|
211
214
|
}
|
|
212
|
-
|
|
215
|
+
// A query code object in the classMap carries the SQL statement (in `name`)
|
|
216
|
+
// with its literals — the same secret/PII surface as an event's sql_query,
|
|
217
|
+
// but keyed without the adapter. Record each statement's adapter now, before
|
|
218
|
+
// the events pass rewrites their sql, so the classMap sanitizes identically.
|
|
219
|
+
const sqlAdapters = new Map();
|
|
220
|
+
for (const event of (_b = appmap.events) !== null && _b !== void 0 ? _b : []) {
|
|
221
|
+
const query = event.sql_query;
|
|
222
|
+
if (query && typeof query.sql === 'string' && !sqlAdapters.has(query.sql))
|
|
223
|
+
sqlAdapters.set(query.sql, query.database_type);
|
|
224
|
+
}
|
|
225
|
+
for (const event of (_c = appmap.events) !== null && _c !== void 0 ? _c : [])
|
|
213
226
|
sanitizeEvent(event, masker);
|
|
214
227
|
// eventUpdates carry the same captured-data fields as events; sanitize them
|
|
215
228
|
// in place, in the same token namespace. They are deliberately not merged
|
|
216
229
|
// into their events — sanitize changes values only, never structure.
|
|
217
|
-
for (const update of Object.values((
|
|
230
|
+
for (const update of Object.values((_d = appmap.eventUpdates) !== null && _d !== void 0 ? _d : {}))
|
|
218
231
|
sanitizeEvent(update, masker);
|
|
232
|
+
sanitizeClassMap(appmap.classMap, masker, sqlAdapters);
|
|
219
233
|
sanitizeMetadata(appmap.metadata, masker);
|
|
220
234
|
// Provenance. Masking is one-way, so on a re-run the values still verbatim
|
|
221
235
|
// are those allowed by BOTH runs — the marker records that intersection.
|
|
@@ -223,7 +237,7 @@ function sanitizeAppMap(appmap, masker = new ValueMasker()) {
|
|
|
223
237
|
const allowValues = prior
|
|
224
238
|
? current.filter((v) => prior.allow_values.includes(v))
|
|
225
239
|
: current;
|
|
226
|
-
appmap.metadata = Object.assign(Object.assign({}, ((
|
|
240
|
+
appmap.metadata = Object.assign(Object.assign({}, ((_e = appmap.metadata) !== null && _e !== void 0 ? _e : {})), { sanitized: { version: exports.CLI_VERSION, allow_values: allowValues } });
|
|
227
241
|
return appmap;
|
|
228
242
|
}
|
|
229
243
|
exports.sanitizeAppMap = sanitizeAppMap;
|
|
@@ -231,6 +245,23 @@ exports.sanitizeAppMap = sanitizeAppMap;
|
|
|
231
245
|
// in the repository URL, and exception / test-failure messages. The command
|
|
232
246
|
// pipeline's normalize step also strips repository credentials, but the walk
|
|
233
247
|
// must not depend on it — the security guarantee lives here, alone.
|
|
248
|
+
// A query code object's `name` (some formats also a `sql` field) is a SQL
|
|
249
|
+
// statement with literals — the same secret surface sanitizeSql handles for an
|
|
250
|
+
// event's sql_query. Parameterize it with the same adapter and masker so it
|
|
251
|
+
// matches the event exactly. Everything else in the classMap (packages,
|
|
252
|
+
// classes, functions, route templates) is schema and is left untouched.
|
|
253
|
+
// @label security.sanitization
|
|
254
|
+
function sanitizeClassMap(entries, masker, sqlAdapters) {
|
|
255
|
+
for (const entry of entries !== null && entries !== void 0 ? entries : []) {
|
|
256
|
+
if (entry.type === 'query') {
|
|
257
|
+
if (typeof entry.name === 'string')
|
|
258
|
+
entry.name = sanitizeSql(entry.name, sqlAdapters.get(entry.name), masker);
|
|
259
|
+
if (typeof entry.sql === 'string')
|
|
260
|
+
entry.sql = sanitizeSql(entry.sql, sqlAdapters.get(entry.sql), masker);
|
|
261
|
+
}
|
|
262
|
+
sanitizeClassMap(entry.children, masker, sqlAdapters);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
234
265
|
function sanitizeMetadata(metadata, masker) {
|
|
235
266
|
if (!metadata)
|
|
236
267
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeAppMap.js","sourceRoot":"","sources":["../../src/lib/sanitizeAppMap.ts"],"names":[],"mappings":";;;AAAA,4CAA+C;AAE/C,8DAA8D;AACjD,QAAA,WAAW,GAAW,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;AAEzE,wEAAwE;AACxE,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,sDAAsD;AACtD,EAAE;AACF,yEAAyE;AACzE,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,mEAAmE;AACnE,gFAAgF;AAChF,gFAAgF;AAChF,wEAAwE;AACxE,EAAE;AACF,2EAA2E;AAC3E,uEAAuE;AACvE,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"sanitizeAppMap.js","sourceRoot":"","sources":["../../src/lib/sanitizeAppMap.ts"],"names":[],"mappings":"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"}
|