@appland/appmap 3.200.0 → 3.201.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 CHANGED
@@ -1,3 +1,20 @@
1
+ # [@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
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **cli:** sanitize eventUpdates too ([0cc5b94](https://github.com/getappmap/appmap-js/commit/0cc5b94f2c0828a93b1a5b85e2c8da5ec6e77dc6))
7
+ * **cli:** sanitize exits non-zero when any file in the batch is skipped ([77ce035](https://github.com/getappmap/appmap-js/commit/77ce035efdb748f08ca8a0186cf93bc2b27e6cfc))
8
+ * **cli:** the masking walk sanitizes metadata itself ([e280c56](https://github.com/getappmap/appmap-js/commit/e280c5601aad1a7968e75942325105f5905edffe))
9
+
10
+
11
+ ### Features
12
+
13
+ * **cli:** add 'appmap sanitize' — equality-preserving value tokenization ([4b2cd63](https://github.com/getappmap/appmap-js/commit/4b2cd63d26dc2d171dbcdb4115bd5c2729b60dc6))
14
+ * **cli:** normalize AppMaps as the first step of sanitize ([5a414d9](https://github.com/getappmap/appmap-js/commit/5a414d98d7c8a1f3c3b17a2cbd482408c4e75a0b))
15
+ * **cli:** normalize HTTP routes in sanitize instead of tokenizing ([f76cd70](https://github.com/getappmap/appmap-js/commit/f76cd7085caa2449628d2dc142ae46a0a46f9f7f))
16
+ * **cli:** provenance markers for sanitize and trim ([1157abc](https://github.com/getappmap/appmap-js/commit/1157abc9687261227b3046ac3b5a2ba50f3396ec))
17
+
1
18
  # [@appland/appmap-v3.200.0](https://github.com/getappmap/appmap-js/compare/@appland/appmap-v3.199.2...@appland/appmap-v3.200.0) (2026-07-03)
2
19
 
3
20
 
package/built/cli.js CHANGED
@@ -47,6 +47,7 @@ const status_1 = __importDefault(require("./cmds/agentInstaller/status"));
47
47
  const openapi_1 = __importDefault(require("./cmds/openapi/openapi"));
48
48
  const prune_1 = __importDefault(require("./cmds/prune/prune"));
49
49
  const trim_1 = __importDefault(require("./cmds/trim/trim"));
50
+ const sanitize_1 = __importDefault(require("./cmds/sanitize/sanitize"));
50
51
  const record_1 = __importDefault(require("./cmds/record/record"));
51
52
  const handleWorkingDirectory_1 = require("./lib/handleWorkingDirectory");
52
53
  const locateAppMapDir_1 = require("./lib/locateAppMapDir");
@@ -164,6 +165,7 @@ yargs(process.argv.slice(2))
164
165
  .command(SequenceDiagramDiffCommand)
165
166
  .command(prune_1.default)
166
167
  .command(trim_1.default)
168
+ .command(sanitize_1.default)
167
169
  .command(ArchiveCommand)
168
170
  .command(RestoreCommand)
169
171
  .command(CompareCommand)
package/built/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const models_1 = require("@appland/models");
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const handleWorkingDirectory_1 = require("../../lib/handleWorkingDirectory");
7
+ const sanitizeAppMap_1 = require("../../lib/sanitizeAppMap");
8
+ const utils_1 = require("../../utils");
9
+ // Build the allowlist: built-ins plus values the user curated. Exact whole-value
10
+ // matches only — an allowed word inside a larger value keeps nothing.
11
+ function buildAllowList(allow, allowFile) {
12
+ const values = new Set(sanitizeAppMap_1.BUILTIN_ALLOW);
13
+ for (const value of allow)
14
+ values.add(value);
15
+ if (allowFile) {
16
+ for (const line of (0, fs_1.readFileSync)(allowFile, 'utf8').split('\n')) {
17
+ // Skip blanks and comment lines; a literal leading '#' value can be
18
+ // passed with --allow instead.
19
+ const value = line.replace(/\r$/, '');
20
+ if (value && !value.startsWith('#'))
21
+ values.add(value);
22
+ }
23
+ }
24
+ return values;
25
+ }
26
+ exports.default = {
27
+ command: 'sanitize <files..>',
28
+ describe: 'Replace captured values in AppMaps with per-file equality-preserving tokens, so the files cannot carry secrets',
29
+ builder: (args) => {
30
+ args.positional('files', {
31
+ describe: 'AppMap file(s) to sanitize',
32
+ type: 'string',
33
+ });
34
+ args.option('allow', {
35
+ describe: 'Value to keep verbatim (repeatable). Exact whole-value match; meant for small public vocabularies such as state or role names',
36
+ type: 'array',
37
+ default: [],
38
+ });
39
+ args.option('allow-file', {
40
+ describe: 'File of values to keep verbatim, one per line (# comments and blank lines skipped)',
41
+ type: 'string',
42
+ });
43
+ args.option('output-dir', {
44
+ describe: 'Write sanitized AppMaps here (default: overwrite each file in place)',
45
+ type: 'string',
46
+ alias: 'o',
47
+ });
48
+ args.option('directory', {
49
+ describe: 'Working directory for the command',
50
+ type: 'string',
51
+ alias: 'd',
52
+ });
53
+ return args;
54
+ },
55
+ handler: async (argv) => {
56
+ var _a;
57
+ (0, handleWorkingDirectory_1.handleWorkingDirectory)(argv.directory);
58
+ const allow = buildAllowList(argv.allow.map(String), argv.allowFile);
59
+ const files = argv.files;
60
+ if (argv.outputDir)
61
+ (0, fs_1.mkdirSync)(argv.outputDir, { recursive: true });
62
+ const userAllow = [...allow].filter((v) => !sanitizeAppMap_1.BUILTIN_ALLOW.has(v)).sort();
63
+ let failed = 0;
64
+ for (const file of files) {
65
+ let before;
66
+ let sanitized;
67
+ let distinct;
68
+ try {
69
+ before = (0, fs_1.readFileSync)(file, 'utf8');
70
+ const appmap = JSON.parse(before);
71
+ // The metadata.sanitized marker is the file's provenance: skip when
72
+ // this exact CLI version already sanitized it with these options.
73
+ const prior = (_a = appmap === null || appmap === void 0 ? void 0 : appmap.metadata) === null || _a === void 0 ? void 0 : _a.sanitized;
74
+ if (prior &&
75
+ prior.version === sanitizeAppMap_1.CLI_VERSION &&
76
+ JSON.stringify(prior.allow_values) === JSON.stringify(userAllow)) {
77
+ console.warn(`sanitize ${file}: already sanitized (v${sanitizeAppMap_1.CLI_VERSION}), skipping`);
78
+ continue;
79
+ }
80
+ // Masking is one-way: allowing a value now cannot restore it if an
81
+ // earlier run already masked it.
82
+ if (prior) {
83
+ const restored = userAllow.filter((v) => !prior.allow_values.includes(v));
84
+ if (restored.length > 0)
85
+ console.warn(`sanitize ${file}: ${restored.length} allow value(s) were not allowed on the ` +
86
+ `first run; already-masked values cannot be restored (re-record to loosen)`);
87
+ }
88
+ // Normalize first — the same transform every AppMap viewer applies on
89
+ // load: eventUpdates merged into their events, event ids re-indexed,
90
+ // unreturned calls balanced, and credentials stripped from
91
+ // metadata.git.repository. Masking then runs over the canonical form.
92
+ const normalized = JSON.parse(JSON.stringify((0, models_1.buildAppMap)().source(appmap).normalize().build()));
93
+ // A fresh masker per file: the token namespace is per-AppMap by
94
+ // design, so values never correlate across files.
95
+ const masker = new sanitizeAppMap_1.ValueMasker(allow);
96
+ sanitized = JSON.stringify((0, sanitizeAppMap_1.sanitizeAppMap)(normalized, masker));
97
+ distinct = masker.distinctCount;
98
+ }
99
+ catch (error) {
100
+ // Skip an unreadable/malformed file rather than aborting: one bad file
101
+ // in a batch must not stop the rest or leave earlier files half-done.
102
+ failed += 1;
103
+ console.warn(`sanitize ${file}: skipped (${error.message})`);
104
+ continue;
105
+ }
106
+ const outputPath = argv.outputDir ? (0, path_1.join)(argv.outputDir, (0, path_1.basename)(file)) : file;
107
+ // Write atomically (temp file in the same dir, then rename) so an
108
+ // interrupted or failed write never leaves a partial AppMap in place.
109
+ await (0, utils_1.writeFileAtomic)((0, path_1.dirname)(outputPath), (0, path_1.basename)(outputPath), 'sanitize.tmp', sanitized);
110
+ console.warn(`sanitize ${file}: ${distinct} distinct value(s) tokenized, ${before.length} -> ${sanitized.length} bytes`);
111
+ }
112
+ // The exit code is the contract: 0 means every file is now sanitized. A
113
+ // skipped file keeps its original, possibly secret-bearing contents, so a
114
+ // partial batch must not look like success. All files are still processed
115
+ // before failing; callers who want best-effort can append `|| true`.
116
+ if (failed > 0) {
117
+ throw new Error(`sanitize: ${failed} of ${files.length} file(s) failed to process and remain unsanitized`);
118
+ }
119
+ },
120
+ };
121
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../src/cmds/sanitize/sanitize.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ const path_1 = require("path");
6
6
  const handleWorkingDirectory_1 = require("../../lib/handleWorkingDirectory");
7
7
  const truncateStructValue_1 = require("../../lib/truncateStructValue");
8
8
  const utils_1 = require("../../utils");
9
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
10
+ const CLI_VERSION = require('../../../package.json').version;
9
11
  function trimSlot(slot, budget) {
10
12
  if (slot && typeof slot.value === 'string') {
11
13
  slot.value = (0, truncateStructValue_1.truncateStructValue)(slot.value, budget);
@@ -56,6 +58,7 @@ exports.default = {
56
58
  return args;
57
59
  },
58
60
  handler: async (argv) => {
61
+ var _a, _b;
59
62
  (0, handleWorkingDirectory_1.handleWorkingDirectory)(argv.directory);
60
63
  // --max-length is a hard cap on every captured value string: it sets the
61
64
  // flat cap and, so the flag means what it says, lowers the per-field and id
@@ -78,7 +81,24 @@ exports.default = {
78
81
  let trimmed;
79
82
  try {
80
83
  before = (0, fs_1.readFileSync)(file, 'utf8');
81
- trimmed = JSON.stringify(trimAppMap(JSON.parse(before), budget));
84
+ const appmap = JSON.parse(before);
85
+ // metadata.trimmed is the file's provenance: skip when this exact CLI
86
+ // version already trimmed it to this cap. Truncation is one-way, so a
87
+ // re-run records the smaller of the two caps and can never grow values.
88
+ const prior = (_a = appmap.metadata) === null || _a === void 0 ? void 0 : _a.trimmed;
89
+ if (prior && prior.version === CLI_VERSION && prior.max_length === maxLength) {
90
+ console.warn(`trim ${file}: already trimmed (v${CLI_VERSION}), skipping`);
91
+ continue;
92
+ }
93
+ if (prior && maxLength > prior.max_length)
94
+ console.warn(`trim ${file}: already trimmed to ${prior.max_length}; a larger cap cannot ` +
95
+ `restore truncated values (re-record to grow them)`);
96
+ trimAppMap(appmap, budget);
97
+ appmap.metadata = Object.assign(Object.assign({}, ((_b = appmap.metadata) !== null && _b !== void 0 ? _b : {})), { trimmed: {
98
+ version: CLI_VERSION,
99
+ max_length: prior ? Math.min(prior.max_length, maxLength) : maxLength,
100
+ } });
101
+ trimmed = JSON.stringify(appmap);
82
102
  }
83
103
  catch (error) {
84
104
  // Skip an unreadable/malformed file rather than aborting: one bad file
@@ -1 +1 @@
1
- {"version":3,"file":"trim.js","sourceRoot":"","sources":["../../../src/cmds/trim/trim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trim.js","sourceRoot":"","sources":["../../../src/cmds/trim/trim.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ const path_1 = require("path");
9
9
  const async_1 = require("async");
10
10
  const assert_1 = __importDefault(require("assert"));
11
11
  const console_1 = require("console");
12
+ const scanner_1 = require("@appland/scanner");
12
13
  const Paths_1 = require("../diffArchive/Paths");
13
14
  const Digests_1 = require("../diffArchive/Digests");
14
15
  const RevisionName_1 = require("../diffArchive/RevisionName");
@@ -204,26 +205,7 @@ class ChangeAnalysisImpl {
204
205
  (0, assert_1.default)(baseManifest && headManifest && paths);
205
206
  const baseFindings = await (0, loadFindings_1.default)(paths, RevisionName_1.RevisionName.Base, baseManifest.appMapDir);
206
207
  const headFindings = await (0, loadFindings_1.default)(paths, RevisionName_1.RevisionName.Head, headManifest.appMapDir);
207
- let newFindings;
208
- let resolvedFindings;
209
- const baseFindingHashes = baseFindings.reduce((memo, finding) => (memo.add(finding.hash_v2), memo), new Set());
210
- const headFindingHashes = headFindings.reduce((memo, finding) => (memo.add(finding.hash_v2), memo), new Set());
211
- const newFindingHashes = [...headFindingHashes].filter((hash) => !baseFindingHashes.has(hash));
212
- const resolvedFindingHashes = [...baseFindingHashes].filter((hash) => !headFindingHashes.has(hash));
213
- newFindings = Object.values(headFindings
214
- .filter((finding) => newFindingHashes.includes(finding.hash_v2))
215
- .reduce((memo, finding) => {
216
- if (!(finding.hash_v2 in memo))
217
- memo[finding.hash_v2] = finding;
218
- return memo;
219
- }, {}));
220
- resolvedFindings = Object.values(baseFindings
221
- .filter((finding) => resolvedFindingHashes.includes(finding.hash_v2))
222
- .reduce((memo, finding) => {
223
- if (!(finding.hash_v2 in memo))
224
- memo[finding.hash_v2] = finding;
225
- return memo;
226
- }, {}));
208
+ const { newFindings, resolvedFindings } = (0, scanner_1.diffFindings)(baseFindings, headFindings);
227
209
  this.findingDiff = {
228
210
  new: newFindings,
229
211
  resolved: resolvedFindings,
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeAnalysis.js","sourceRoot":"","sources":["../../src/diffArchive/ChangeAnalysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChangeAnalysis.js","sourceRoot":"","sources":["../../src/diffArchive/ChangeAnalysis.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.right-2{right:.5rem}.top-1\/2{top:50%}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-3{height:.75rem}.h-full{height:100%}.max-h-96{max-height:24rem}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-14{width:3.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0}.flex-1{flex:1 1 0%}.flex-none{flex:none}.shrink{flex-shrink:1}.-translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.25rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.5rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.75rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-t{border-top-width:1px}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity,1))}.border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity,1))}.border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity,1))}.border-purple-900\/40{border-color:rgba(88,28,135,.4)}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-blue-900\/40{background-color:rgba(30,58,138,.4)}.bg-blue-900\/50{background-color:rgba(30,58,138,.5)}.bg-blue-900\/60{background-color:rgba(30,58,138,.6)}.bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-gray-800\/50{background-color:rgba(31,41,55,.5)}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-900\/40{background-color:rgba(20,83,45,.4)}.bg-green-900\/50{background-color:rgba(20,83,45,.5)}.bg-green-900\/60{background-color:rgba(20,83,45,.6)}.bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-orange-900\/60{background-color:rgba(124,45,18,.6)}.bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.bg-purple-900\/50{background-color:rgba(88,28,135,.5)}.bg-purple-900\/60{background-color:rgba(88,28,135,.6)}.bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity,1))}.bg-purple-950\/30{background-color:rgba(59,7,100,.3)}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-900\/50{background-color:rgba(127,29,29,.5)}.bg-red-900\/60{background-color:rgba(127,29,29,.6)}.bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-yellow-900\/50{background-color:rgba(113,63,18,.5)}.bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity,1))}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pr-20{padding-right:5rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity,1))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity,1))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-500\/80{color:rgba(234,179,8,.8)}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.decoration-gray-600{-webkit-text-decoration-color:#4b5563;text-decoration-color:#4b5563}.decoration-dotted{-webkit-text-decoration-style:dotted;text-decoration-style:dotted}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px -1px rgba(0,0,0,0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:bg-gray-800\/50:hover{background-color:rgba(31,41,55,.5)}.hover\:bg-gray-800\/60:hover{background-color:rgba(31,41,55,.6)}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.hover\:text-purple-300:hover{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.hover\:underline:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.hover\:decoration-blue-400:hover{-webkit-text-decoration-color:#60a5fa;text-decoration-color:#60a5fa}.hover\:ring-1:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.hover\:ring-gray-500:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:768px){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1280px){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.right-2{right:.5rem}.top-1\/2{top:50%}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-3{height:.75rem}.h-full{height:100%}.max-h-96{max-height:24rem}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-14{width:3.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0}.flex-1{flex:1 1 0%}.flex-none{flex:none}.shrink{flex-shrink:1}.grow{flex-grow:1}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.25rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.5rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.75rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-t{border-top-width:1px}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity,1))}.border-orange-700{--tw-border-opacity:1;border-color:rgb(194 65 12/var(--tw-border-opacity,1))}.border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity,1))}.border-purple-900\/40{border-color:rgba(88,28,135,.4)}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-blue-900\/40{background-color:rgba(30,58,138,.4)}.bg-blue-900\/50{background-color:rgba(30,58,138,.5)}.bg-blue-900\/60{background-color:rgba(30,58,138,.6)}.bg-blue-950{--tw-bg-opacity:1;background-color:rgb(23 37 84/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-gray-800\/50{background-color:rgba(31,41,55,.5)}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-900\/40{background-color:rgba(20,83,45,.4)}.bg-green-900\/50{background-color:rgba(20,83,45,.5)}.bg-green-900\/60{background-color:rgba(20,83,45,.6)}.bg-green-950{--tw-bg-opacity:1;background-color:rgb(5 46 22/var(--tw-bg-opacity,1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-orange-900\/60{background-color:rgba(124,45,18,.6)}.bg-orange-950{--tw-bg-opacity:1;background-color:rgb(67 20 7/var(--tw-bg-opacity,1))}.bg-purple-900\/50{background-color:rgba(88,28,135,.5)}.bg-purple-900\/60{background-color:rgba(88,28,135,.6)}.bg-purple-950{--tw-bg-opacity:1;background-color:rgb(59 7 100/var(--tw-bg-opacity,1))}.bg-purple-950\/30{background-color:rgba(59,7,100,.3)}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-900\/50{background-color:rgba(127,29,29,.5)}.bg-red-900\/60{background-color:rgba(127,29,29,.6)}.bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-yellow-900\/50{background-color:rgba(113,63,18,.5)}.bg-yellow-950{--tw-bg-opacity:1;background-color:rgb(66 32 6/var(--tw-bg-opacity,1))}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pr-20{padding-right:5rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity,1))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-orange-200{--tw-text-opacity:1;color:rgb(254 215 170/var(--tw-text-opacity,1))}.text-orange-300{--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity,1))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-500\/80{color:rgba(234,179,8,.8)}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.decoration-gray-600{-webkit-text-decoration-color:#4b5563;text-decoration-color:#4b5563}.decoration-dotted{-webkit-text-decoration-style:dotted;text-decoration-style:dotted}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px -1px rgba(0,0,0,0.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-600:hover{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:bg-gray-800\/50:hover{background-color:rgba(31,41,55,.5)}.hover\:bg-gray-800\/60:hover{background-color:rgba(31,41,55,.6)}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.hover\:text-purple-300:hover{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.hover\:underline:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.hover\:decoration-blue-400:hover{-webkit-text-decoration-color:#60a5fa;text-decoration-color:#60a5fa}.hover\:ring-1:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.hover\:ring-gray-500:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:768px){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1280px){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeAppMap = exports.ValueMasker = exports.BUILTIN_ALLOW = exports.CLI_VERSION = void 0;
4
+ const models_1 = require("@appland/models");
5
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
6
+ exports.CLI_VERSION = require('../../package.json').version;
7
+ // Sanitize an AppMap so its committed form is structurally incapable of
8
+ // carrying a secret. Every captured runtime value string is replaced with a
9
+ // per-AppMap token (`<v1>`, `<v2>`, …) assigned in order of first appearance,
10
+ // so equality WITHIN one AppMap is preserved exactly (data-flow correlation
11
+ // still reads), while no content characters are retained. Tokens are shared
12
+ // across all value positions, so a header value, a parameter, and a return
13
+ // value that held the same string get the same token.
14
+ //
15
+ // Two fields are the exception: an HTTP server `path_info` with no route
16
+ // template, and a client `url`. These are the only captured values that feed
17
+ // the `appmap compare` digest (through the request route), so a per-file token
18
+ // would make two otherwise-identical recordings compare as different. They are
19
+ // instead normalized to a deterministic, lossy route template (see
20
+ // normalizeUrl) — stable across files, with the concrete id dropped rather than
21
+ // encoded. (A content hash would give cross-file stability for free, but a hash
22
+ // of low-entropy PII is reversible by guess-and-check; erasure is not.)
23
+ //
24
+ // Sanitization is positional, driven by the AppMap format: it touches only
25
+ // the fields defined to hold captured runtime data. Code object names,
26
+ // classes, paths, labels, and route templates are schema, not data, and are
27
+ // never modified.
28
+ //
29
+ // The per-file token namespace is deliberate: unlinkability across
30
+ // files/revisions is the anti-correlation guarantee, and (routes aside) values
31
+ // are excluded from the comparison digest, so nothing is lost by it.
32
+ // Kind recognizers annotate a token with the *shape* of the original value
33
+ // (`<uuid:v3>`) — readability only. Recognition never exempts a value from
34
+ // sanitization: a UUID is exactly the shape session tokens take.
35
+ const KIND_PATTERNS = [
36
+ ['uuid', /^\{?[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\}?$/],
37
+ ['iso8601', /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:?\d{2})?)?$/],
38
+ ['hex', /^(0x)?[0-9a-fA-F]{16,}$/],
39
+ ['int', /^-?\d+$/],
40
+ ];
41
+ // The shape of an assigned token. Recognition of existing tokens is gated on
42
+ // the file's metadata.sanitized marker: in a marked file the tokens are ours
43
+ // and pass through (making re-runs idempotent); in a fresh file a string that
44
+ // merely looks like a token is application data and is masked like any other.
45
+ const TOKEN_PATTERN = /^<(?:[a-z0-9]+:)?v\d+>$/;
46
+ // Values kept verbatim: universally enumerable sets with no secret capacity.
47
+ // Project-specific vocabularies (enum strings such as state names) are added
48
+ // via the command's --allow/--allow-file options — curated by a human, exact
49
+ // match only. Matching never keeps part of a value.
50
+ exports.BUILTIN_ALLOW = new Set([
51
+ '',
52
+ 'true',
53
+ 'false',
54
+ 'True',
55
+ 'False',
56
+ 'TRUE',
57
+ 'FALSE',
58
+ 'null',
59
+ 'NULL',
60
+ 'nil',
61
+ 'None',
62
+ 'undefined',
63
+ ]);
64
+ class ValueMasker {
65
+ constructor(allow = exports.BUILTIN_ALLOW) {
66
+ this.allow = allow;
67
+ this.tokens = new Map();
68
+ this.counter = 0;
69
+ // Set by sanitizeAppMap when the file carries a metadata.sanitized marker.
70
+ this.recognizeTokens = false;
71
+ }
72
+ get distinctCount() {
73
+ return this.tokens.size;
74
+ }
75
+ // The user-supplied allowlist (built-ins excluded), for the provenance marker.
76
+ get userAllowValues() {
77
+ return [...this.allow].filter((v) => !exports.BUILTIN_ALLOW.has(v)).sort();
78
+ }
79
+ // Start numbering new tokens above `n`. Used when a document already carries
80
+ // tokens (sanitized before this code covered some field): a new value must
81
+ // never receive a token that another value in the document already holds.
82
+ reserveThrough(n) {
83
+ this.counter = Math.max(this.counter, n);
84
+ }
85
+ // The masking primitive: every captured value string passes through here
86
+ // and is replaced with a content-free token (allow-list and
87
+ // already-assigned tokens excepted). Labeled so appmap-review interprets
88
+ // changes to what escapes masking.
89
+ // @label security.sanitization
90
+ mask(value) {
91
+ var _a;
92
+ if (this.allow.has(value) || (this.recognizeTokens && TOKEN_PATTERN.test(value)))
93
+ return value;
94
+ let token = this.tokens.get(value);
95
+ if (!token) {
96
+ const kind = (_a = KIND_PATTERNS.find(([, pattern]) => pattern.test(value))) === null || _a === void 0 ? void 0 : _a[0];
97
+ this.counter += 1;
98
+ token = `<${kind ? `${kind}:` : ''}v${this.counter}>`;
99
+ this.tokens.set(value, token);
100
+ }
101
+ return token;
102
+ }
103
+ }
104
+ exports.ValueMasker = ValueMasker;
105
+ // SQL is parameterized, not tokenized: the statement shape is behavioral
106
+ // signal the review reads; the literals are where secrets/PII live.
107
+ // normalizeSQL (the New Relic obfuscator) replaces literals with `?` — but on
108
+ // a statement it cannot reliably obfuscate it returns the ORIGINAL, which is
109
+ // fail-open. Sanitization must fail closed, so any residue that suggests an
110
+ // unobfuscated literal downgrades the whole statement to a token.
111
+ // Residue patterns per adapter follow the obfuscator's own cleanup table
112
+ // (double quotes are string literals in MySQL but identifiers in Postgres).
113
+ const SQL_RESIDUE = {
114
+ mysql: /'|"|\/\*|\*\//,
115
+ mysql2: /'|"|\/\*|\*\//,
116
+ postgres: /'|\/\*|\*\/|\$(?!\?)/,
117
+ sqlite: /'|\/\*|\*\//,
118
+ cassandra: /'|\/\*|\*\//,
119
+ oracle: /'|\/\*|\*\//,
120
+ oracle_enhanced: /'|\/\*|\*\//,
121
+ };
122
+ const SQL_RESIDUE_DEFAULT = /'|"|\/\*|\*\//;
123
+ // @label security.sanitization
124
+ function sanitizeSql(sql, adapter, masker) {
125
+ if (masker.recognizeTokens && TOKEN_PATTERN.test(sql))
126
+ return sql;
127
+ const normalized = (0, models_1.normalizeSQL)(sql, adapter !== null && adapter !== void 0 ? adapter : '');
128
+ const residue = (adapter && SQL_RESIDUE[adapter]) || SQL_RESIDUE_DEFAULT;
129
+ if (residue.test(normalized))
130
+ return masker.mask(sql);
131
+ return normalized;
132
+ }
133
+ function sanitizeSlot(slot, masker) {
134
+ if (slot && typeof slot.value === 'string')
135
+ slot.value = masker.mask(slot.value);
136
+ }
137
+ // Header NAMES are schema (kept); header VALUES are captured data (tokenized).
138
+ function sanitizeHeaders(headers, masker) {
139
+ if (!headers)
140
+ return;
141
+ for (const name of Object.keys(headers)) {
142
+ const value = headers[name];
143
+ if (typeof value === 'string')
144
+ headers[name] = masker.mask(value);
145
+ }
146
+ }
147
+ // HTTP paths and client URLs are the one kind of captured value that feeds the
148
+ // `appmap compare` digest: the request route is derived from `path_info`/`url`
149
+ // (Event.route). A per-file `<vN>` token there would vary between recordings
150
+ // and destabilize the digest, so instead of tokenizing we normalize to a route
151
+ // template — deterministic (same input, same output, so the digest is stable
152
+ // across files) and lossy (the concrete id is dropped, not encoded, so there is
153
+ // nothing to reverse).
154
+ //
155
+ // A segment that looks like a value (numeric/uuid/hex/timestamp id) becomes a
156
+ // `:kind` placeholder; a plain route word or version segment is kept; anything
157
+ // else (mixed-alnum ids, opaque tokens, emails) falls to `:param`. Without the
158
+ // application's route table this is a heuristic: a purely alphabetic segment
159
+ // (a username in `/users/alice`) is indistinguishable from a route word and is
160
+ // kept — the one spot a template-less path can retain a value.
161
+ function normalizeSegment(seg) {
162
+ var _a;
163
+ if (seg === '')
164
+ return seg; // preserve leading/trailing/'//' structure
165
+ const kind = (_a = KIND_PATTERNS.find(([, pattern]) => pattern.test(seg))) === null || _a === void 0 ? void 0 : _a[0];
166
+ if (kind)
167
+ return `:${kind}`;
168
+ if (/^[A-Za-z][A-Za-z_-]*$/.test(seg) || /^v\d+$/.test(seg))
169
+ return seg;
170
+ return ':param';
171
+ }
172
+ // Drop the query string and fragment entirely: they are the densest home for
173
+ // secrets and PII (tokens, emails, ids as `?user=…`) and carry little route
174
+ // signal, so dropping them is both the safest and simplest choice. (A later
175
+ // revision could instead keep sorted parameter *names* with erased values, if
176
+ // query-distinguished endpoints ever need to compare apart.)
177
+ // @label security.sanitization
178
+ function normalizePath(path) {
179
+ return path.split(/[?#]/)[0].split('/').map(normalizeSegment).join('/');
180
+ }
181
+ // Client URL: strip userinfo (a `user:pass@` can ride here as in a git URL),
182
+ // keep scheme + host + port as route signal, parameterize the path, drop query
183
+ // and fragment. A relative or malformed URL that won't parse is parameterized
184
+ // as a bare path — deterministic and secret-free, never fail-open.
185
+ // @label security.sanitization
186
+ function normalizeUrl(url) {
187
+ try {
188
+ const parsed = new URL(url);
189
+ return `${parsed.protocol}//${parsed.host}${normalizePath(parsed.pathname)}`;
190
+ }
191
+ catch (_a) {
192
+ return normalizePath(url);
193
+ }
194
+ }
195
+ const TOKEN_SCAN = /<(?:[a-z0-9]+:)?v(\d+)>/g;
196
+ // The redaction boundary: sanitizes every field defined to hold captured
197
+ // runtime data (parameters, return values, exceptions, HTTP paths/headers,
198
+ // SQL) so the committed AppMap is structurally incapable of carrying a secret.
199
+ // Labeled so appmap-review interprets any change to this boundary.
200
+ // @label security.sanitization
201
+ function sanitizeAppMap(appmap, masker = new ValueMasker()) {
202
+ var _a, _b, _c, _d;
203
+ const prior = (_a = appmap.metadata) === null || _a === void 0 ? void 0 : _a.sanitized;
204
+ masker.recognizeTokens = Boolean(prior);
205
+ if (prior) {
206
+ // The document's tokens are ours: number new tokens above them so no
207
+ // token is ever shared by two different values.
208
+ for (const match of JSON.stringify(appmap).matchAll(TOKEN_SCAN)) {
209
+ masker.reserveThrough(Number(match[1]));
210
+ }
211
+ }
212
+ for (const event of (_b = appmap.events) !== null && _b !== void 0 ? _b : [])
213
+ sanitizeEvent(event, masker);
214
+ // eventUpdates carry the same captured-data fields as events; sanitize them
215
+ // in place, in the same token namespace. They are deliberately not merged
216
+ // into their events — sanitize changes values only, never structure.
217
+ for (const update of Object.values((_c = appmap.eventUpdates) !== null && _c !== void 0 ? _c : {}))
218
+ sanitizeEvent(update, masker);
219
+ sanitizeMetadata(appmap.metadata, masker);
220
+ // Provenance. Masking is one-way, so on a re-run the values still verbatim
221
+ // are those allowed by BOTH runs — the marker records that intersection.
222
+ const current = masker.userAllowValues;
223
+ const allowValues = prior
224
+ ? current.filter((v) => prior.allow_values.includes(v))
225
+ : current;
226
+ appmap.metadata = Object.assign(Object.assign({}, ((_d = appmap.metadata) !== null && _d !== void 0 ? _d : {})), { sanitized: { version: exports.CLI_VERSION, allow_values: allowValues } });
227
+ return appmap;
228
+ }
229
+ exports.sanitizeAppMap = sanitizeAppMap;
230
+ // Metadata carries captured data too: the git identity, credentials embedded
231
+ // in the repository URL, and exception / test-failure messages. The command
232
+ // pipeline's normalize step also strips repository credentials, but the walk
233
+ // must not depend on it — the security guarantee lives here, alone.
234
+ function sanitizeMetadata(metadata, masker) {
235
+ if (!metadata)
236
+ return;
237
+ const git = metadata.git;
238
+ if (git) {
239
+ if (typeof git.repository === 'string' && /^https?:/.test(git.repository)) {
240
+ const repository = git.repository;
241
+ try {
242
+ const url = new URL(repository);
243
+ url.username = '';
244
+ url.password = '';
245
+ git.repository = url.toString();
246
+ }
247
+ catch (_a) {
248
+ // Unparseable URL: mask the whole value rather than risk a credential.
249
+ git.repository = masker.mask(repository);
250
+ }
251
+ }
252
+ if (typeof git.user_name === 'string')
253
+ git.user_name = masker.mask(git.user_name);
254
+ if (typeof git.user_email === 'string')
255
+ git.user_email = masker.mask(git.user_email);
256
+ }
257
+ if (metadata.exception && typeof metadata.exception.message === 'string')
258
+ metadata.exception.message = masker.mask(metadata.exception.message);
259
+ if (metadata.test_failure && typeof metadata.test_failure.message === 'string')
260
+ metadata.test_failure.message = masker.mask(metadata.test_failure.message);
261
+ }
262
+ function sanitizeEvent(event, masker) {
263
+ var _a, _b, _c, _d, _e;
264
+ for (const p of (_a = event.parameters) !== null && _a !== void 0 ? _a : [])
265
+ sanitizeSlot(p, masker);
266
+ for (const m of (_b = event.message) !== null && _b !== void 0 ? _b : [])
267
+ sanitizeSlot(m, masker);
268
+ sanitizeSlot(event.receiver, masker);
269
+ sanitizeSlot(event.return_value, masker);
270
+ for (const x of (_c = event.exceptions) !== null && _c !== void 0 ? _c : []) {
271
+ if (typeof x.message === 'string')
272
+ x.message = masker.mask(x.message);
273
+ if (typeof x.value === 'string')
274
+ x.value = masker.mask(x.value);
275
+ }
276
+ const serverRequest = event.http_server_request;
277
+ if (serverRequest) {
278
+ // path_info carries the concrete path (ids, PII). When a route template
279
+ // (normalized_path_info) is present it wins the digest, so the concrete
280
+ // path is not structural and we fully redact it to a token. When it is
281
+ // absent, path_info IS the digest's route, so normalize it to a
282
+ // deterministic template instead — a per-file token there would vary
283
+ // between recordings and destabilize `appmap compare`.
284
+ if (typeof serverRequest.path_info === 'string')
285
+ serverRequest.path_info = serverRequest.normalized_path_info
286
+ ? masker.mask(serverRequest.path_info)
287
+ : normalizePath(serverRequest.path_info);
288
+ sanitizeHeaders(serverRequest.headers, masker);
289
+ }
290
+ const clientRequest = event.http_client_request;
291
+ if (clientRequest) {
292
+ // The client URL always feeds the ClientRPC route/digest, so normalize it
293
+ // to a route template rather than tokenize it (see normalizeUrl).
294
+ if (typeof clientRequest.url === 'string')
295
+ clientRequest.url = normalizeUrl(clientRequest.url);
296
+ sanitizeHeaders(clientRequest.headers, masker);
297
+ }
298
+ sanitizeHeaders((_d = event.http_server_response) === null || _d === void 0 ? void 0 : _d.headers, masker);
299
+ sanitizeHeaders((_e = event.http_client_response) === null || _e === void 0 ? void 0 : _e.headers, masker);
300
+ const sqlQuery = event.sql_query;
301
+ if (sqlQuery && typeof sqlQuery.sql === 'string')
302
+ sqlQuery.sql = sanitizeSql(sqlQuery.sql, sqlQuery.database_type, masker);
303
+ }
304
+ //# sourceMappingURL=sanitizeAppMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeAppMap.js","sourceRoot":"","sources":["../../src/lib/sanitizeAppMap.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appland/appmap",
3
- "version": "3.200.0",
3
+ "version": "3.201.0",
4
4
  "description": "",
5
5
  "bin": "built/cli.js",
6
6
  "engines": {