media-analysis-mcp 2.0.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/LICENSE +21 -0
- package/README.md +191 -0
- package/dist/bailian.js +320 -0
- package/dist/bailian.js.map +1 -0
- package/dist/bytes.js +20 -0
- package/dist/bytes.js.map +1 -0
- package/dist/cli.js +56 -0
- package/dist/cli.js.map +1 -0
- package/dist/config-lookup.js +271 -0
- package/dist/config-lookup.js.map +1 -0
- package/dist/config.js +212 -0
- package/dist/config.js.map +1 -0
- package/dist/doctor.js +206 -0
- package/dist/doctor.js.map +1 -0
- package/dist/errors.js +387 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/media.js +585 -0
- package/dist/media.js.map +1 -0
- package/dist/mpeg-audio.js +226 -0
- package/dist/mpeg-audio.js.map +1 -0
- package/dist/provider-error.js +73 -0
- package/dist/provider-error.js.map +1 -0
- package/dist/sanitize.js +103 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/server.js +290 -0
- package/dist/server.js.map +1 -0
- package/dist/sse.js +327 -0
- package/dist/sse.js.map +1 -0
- package/dist/upload-cache.js +146 -0
- package/dist/upload-cache.js.map +1 -0
- package/dist/upload.js +368 -0
- package/dist/upload.js.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/package.json +73 -0
- package/scripts/prepare.mjs +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { readBounded } from "./bytes.js";
|
|
2
|
+
/**
|
|
3
|
+
* Bounded MPEG audio (MP3) probe. Only MPEG Layer III audio frames are accepted;
|
|
4
|
+
* an ID3-only file, a Layer I/II stream, or a file whose first frame lies past
|
|
5
|
+
* the bounded window is refused instead of being handed to the provider as
|
|
6
|
+
* "audio" that cannot be decoded.
|
|
7
|
+
*/
|
|
8
|
+
export const MP3_PROBE_BYTES_LIMIT = 64 * 1024;
|
|
9
|
+
const MAX_ID3V2_TAG_BYTES = 1024 * 1024;
|
|
10
|
+
const FRAME_SCAN_BYTES = 1024;
|
|
11
|
+
const MIN_CONSECUTIVE_FRAMES = 3;
|
|
12
|
+
const MAX_SAMPLED_FRAMES = 16;
|
|
13
|
+
const MIN_PLAUSIBLE_KBPS = 8;
|
|
14
|
+
const MAX_PLAUSIBLE_KBPS = 320;
|
|
15
|
+
const LAYER3_BITRATES = {
|
|
16
|
+
"1": [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320],
|
|
17
|
+
"2": [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],
|
|
18
|
+
"2.5": [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],
|
|
19
|
+
};
|
|
20
|
+
const SAMPLE_RATES = {
|
|
21
|
+
"1": [44100, 48000, 32000],
|
|
22
|
+
"2": [22050, 24000, 16000],
|
|
23
|
+
"2.5": [11025, 12000, 8000],
|
|
24
|
+
};
|
|
25
|
+
function versionFromBits(bits) {
|
|
26
|
+
if (bits === 0)
|
|
27
|
+
return "2.5";
|
|
28
|
+
if (bits === 2)
|
|
29
|
+
return "2";
|
|
30
|
+
if (bits === 3)
|
|
31
|
+
return "1";
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parses one 4-byte MPEG audio frame header. `other-layer` is reported instead of
|
|
36
|
+
* `undefined` so a Layer I/II file can be refused with its actual codec name.
|
|
37
|
+
*/
|
|
38
|
+
export function parseMpegFrameHeader(buffer) {
|
|
39
|
+
if (buffer.length < 4)
|
|
40
|
+
return undefined;
|
|
41
|
+
const b0 = buffer[0];
|
|
42
|
+
const b1 = buffer[1];
|
|
43
|
+
const b2 = buffer[2];
|
|
44
|
+
const b3 = buffer[3];
|
|
45
|
+
if (b0 === undefined || b1 === undefined || b2 === undefined || b3 === undefined)
|
|
46
|
+
return undefined;
|
|
47
|
+
if (b0 !== 0xff || (b1 & 0xe0) !== 0xe0)
|
|
48
|
+
return undefined;
|
|
49
|
+
const version = versionFromBits((b1 >> 3) & 0x03);
|
|
50
|
+
const layerBits = (b1 >> 1) & 0x03;
|
|
51
|
+
if (version === undefined || layerBits === 0)
|
|
52
|
+
return undefined;
|
|
53
|
+
const layer = (4 - layerBits);
|
|
54
|
+
if (layer !== 3) {
|
|
55
|
+
return { kind: "other-layer", codec: `mpeg${version}-layer${String(layer)}` };
|
|
56
|
+
}
|
|
57
|
+
const bitrateIndex = (b2 >> 4) & 0x0f;
|
|
58
|
+
const sampleRateIndex = (b2 >> 2) & 0x03;
|
|
59
|
+
if (bitrateIndex === 0 || bitrateIndex === 15 || sampleRateIndex === 3)
|
|
60
|
+
return undefined;
|
|
61
|
+
if ((b3 & 0x03) === 2)
|
|
62
|
+
return undefined;
|
|
63
|
+
const bitrateKbps = LAYER3_BITRATES[version][bitrateIndex];
|
|
64
|
+
const sampleRate = SAMPLE_RATES[version][sampleRateIndex];
|
|
65
|
+
if (bitrateKbps === undefined || sampleRate === undefined || bitrateKbps <= 0)
|
|
66
|
+
return undefined;
|
|
67
|
+
const samplesPerFrame = version === "1" ? 1152 : 576;
|
|
68
|
+
const padding = (b2 >> 1) & 0x01;
|
|
69
|
+
const frameLength = Math.floor((samplesPerFrame / 8) * ((bitrateKbps * 1000) / sampleRate)) + padding;
|
|
70
|
+
if (frameLength < 24 || frameLength > 8192)
|
|
71
|
+
return undefined;
|
|
72
|
+
return {
|
|
73
|
+
kind: "frame",
|
|
74
|
+
header: {
|
|
75
|
+
version,
|
|
76
|
+
layer,
|
|
77
|
+
bitrateKbps,
|
|
78
|
+
sampleRate,
|
|
79
|
+
mono: ((b3 >> 6) & 0x03) === 3,
|
|
80
|
+
frameLength,
|
|
81
|
+
samplesPerFrame,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function syncSafeSize(bytes) {
|
|
86
|
+
if (bytes.length < 4)
|
|
87
|
+
return undefined;
|
|
88
|
+
let size = 0;
|
|
89
|
+
for (const byte of bytes) {
|
|
90
|
+
if ((byte & 0x80) !== 0)
|
|
91
|
+
return undefined;
|
|
92
|
+
size = size * 128 + byte;
|
|
93
|
+
}
|
|
94
|
+
return size;
|
|
95
|
+
}
|
|
96
|
+
function sideInfoBytes(header) {
|
|
97
|
+
if (header.version === "1") {
|
|
98
|
+
return header.mono ? 17 : 32;
|
|
99
|
+
}
|
|
100
|
+
return header.mono ? 9 : 17;
|
|
101
|
+
}
|
|
102
|
+
/** Xing/Info/VBRI frame counts are exact enough to report a duration. */
|
|
103
|
+
function frameCountFromTags(head, header) {
|
|
104
|
+
const xingRelative = 4 + sideInfoBytes(header);
|
|
105
|
+
if (xingRelative + 12 <= head.length) {
|
|
106
|
+
const tag = head.toString("ascii", xingRelative, xingRelative + 4);
|
|
107
|
+
if (tag === "Xing" || tag === "Info") {
|
|
108
|
+
const flags = head.readUInt32BE(xingRelative + 4);
|
|
109
|
+
if ((flags & 0x01) !== 0) {
|
|
110
|
+
const count = head.readUInt32BE(xingRelative + 8);
|
|
111
|
+
if (count > 0)
|
|
112
|
+
return count;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (44 <= head.length && head.toString("ascii", 36, 40) === "VBRI") {
|
|
117
|
+
const count = head.readUInt32BE(36 + 14);
|
|
118
|
+
if (count > 0)
|
|
119
|
+
return count;
|
|
120
|
+
}
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
function plausibleDuration(seconds, byteLength) {
|
|
124
|
+
if (!Number.isFinite(seconds) || seconds <= 0 || byteLength <= 0)
|
|
125
|
+
return undefined;
|
|
126
|
+
const impliedKbps = (byteLength * 8) / seconds / 1000;
|
|
127
|
+
if (impliedKbps < MIN_PLAUSIBLE_KBPS || impliedKbps > MAX_PLAUSIBLE_KBPS)
|
|
128
|
+
return undefined;
|
|
129
|
+
return seconds;
|
|
130
|
+
}
|
|
131
|
+
async function findFirstFrame(reader, from, fileSize, budget) {
|
|
132
|
+
const windowLength = Math.min(FRAME_SCAN_BYTES, fileSize - from);
|
|
133
|
+
if (windowLength < 4)
|
|
134
|
+
return undefined;
|
|
135
|
+
const window = await readBounded(reader, from, windowLength, budget, MP3_PROBE_BYTES_LIMIT);
|
|
136
|
+
if (window === undefined)
|
|
137
|
+
return undefined;
|
|
138
|
+
for (let index = 0; index + 4 <= window.length; index += 1) {
|
|
139
|
+
const parsed = parseMpegFrameHeader(window.subarray(index, index + 4));
|
|
140
|
+
if (parsed === undefined)
|
|
141
|
+
continue;
|
|
142
|
+
if (parsed.kind === "other-layer")
|
|
143
|
+
return { otherLayer: parsed.codec };
|
|
144
|
+
return { offset: from + index, header: parsed.header };
|
|
145
|
+
}
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
export async function probeMpegAudio(reader, fileSize) {
|
|
149
|
+
const budget = { bytesRead: 0 };
|
|
150
|
+
if (!Number.isSafeInteger(fileSize) || fileSize < 128)
|
|
151
|
+
return { status: "invalid" };
|
|
152
|
+
const start = await readBounded(reader, 0, 12, budget, MP3_PROBE_BYTES_LIMIT);
|
|
153
|
+
if (start === undefined)
|
|
154
|
+
return { status: "invalid" };
|
|
155
|
+
// Decided before any frame sync search: a container must never be scanned for
|
|
156
|
+
// frame headers, because media bytes can contain accidental sync patterns.
|
|
157
|
+
if (start.toString("ascii", 4, 8) === "ftyp")
|
|
158
|
+
return { status: "container" };
|
|
159
|
+
const id3 = start.subarray(0, 10);
|
|
160
|
+
let audioStart = 0;
|
|
161
|
+
if (id3.toString("ascii", 0, 3) === "ID3") {
|
|
162
|
+
const version = id3[3];
|
|
163
|
+
if (version === undefined || version < 2 || version > 4)
|
|
164
|
+
return { status: "invalid" };
|
|
165
|
+
const size = syncSafeSize(id3.subarray(6, 10));
|
|
166
|
+
if (size === undefined)
|
|
167
|
+
return { status: "invalid" };
|
|
168
|
+
const footerBytes = ((id3[5] ?? 0) & 0x10) === 0 ? 0 : 10;
|
|
169
|
+
audioStart = 10 + size + footerBytes;
|
|
170
|
+
if (audioStart >= fileSize || audioStart > MAX_ID3V2_TAG_BYTES)
|
|
171
|
+
return { status: "invalid" };
|
|
172
|
+
}
|
|
173
|
+
const first = await findFirstFrame(reader, audioStart, fileSize, budget);
|
|
174
|
+
if (first === undefined)
|
|
175
|
+
return { status: "invalid" };
|
|
176
|
+
if ("otherLayer" in first)
|
|
177
|
+
return { status: "unsupported", codec: first.otherLayer };
|
|
178
|
+
const firstHeader = first.header;
|
|
179
|
+
const firstOffset = first.offset;
|
|
180
|
+
const validatedOffsets = [];
|
|
181
|
+
let inconsistent = false;
|
|
182
|
+
let cursor = firstHeader;
|
|
183
|
+
let offset = firstOffset;
|
|
184
|
+
for (let index = 0; index < MAX_SAMPLED_FRAMES; index += 1) {
|
|
185
|
+
validatedOffsets.push(offset);
|
|
186
|
+
const next = offset + cursor.frameLength;
|
|
187
|
+
if (next + 4 > fileSize)
|
|
188
|
+
break;
|
|
189
|
+
const head = await readBounded(reader, next, 4, budget, MP3_PROBE_BYTES_LIMIT);
|
|
190
|
+
const parsed = head === undefined ? undefined : parseMpegFrameHeader(head);
|
|
191
|
+
if (parsed === undefined || parsed.kind !== "frame")
|
|
192
|
+
break;
|
|
193
|
+
const header = parsed.header;
|
|
194
|
+
if (header.version !== firstHeader.version ||
|
|
195
|
+
header.sampleRate !== firstHeader.sampleRate ||
|
|
196
|
+
header.layer !== firstHeader.layer) {
|
|
197
|
+
inconsistent = true;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
cursor = header;
|
|
201
|
+
offset = next;
|
|
202
|
+
}
|
|
203
|
+
if (validatedOffsets.length < MIN_CONSECUTIVE_FRAMES || inconsistent) {
|
|
204
|
+
return { status: "invalid" };
|
|
205
|
+
}
|
|
206
|
+
const headLength = Math.min(firstHeader.frameLength, 320);
|
|
207
|
+
const head = await readBounded(reader, firstOffset, headLength, budget, MP3_PROBE_BYTES_LIMIT);
|
|
208
|
+
const declaredFrames = head === undefined ? undefined : frameCountFromTags(head, firstHeader);
|
|
209
|
+
// A duration is only reported when the stream declares it. Sampling cannot prove that
|
|
210
|
+
// a whole file is constant bitrate — a region between two samples can differ — and a
|
|
211
|
+
// wrong number would drive the one-hour gate, so an undeclared stream stays unknown.
|
|
212
|
+
const durationSeconds = declaredFrames === undefined
|
|
213
|
+
? undefined
|
|
214
|
+
: plausibleDuration((declaredFrames * firstHeader.samplesPerFrame) / firstHeader.sampleRate, fileSize);
|
|
215
|
+
return {
|
|
216
|
+
status: "ok",
|
|
217
|
+
facts: {
|
|
218
|
+
codec: "mp3",
|
|
219
|
+
sampleRate: firstHeader.sampleRate,
|
|
220
|
+
bitrateKbps: firstHeader.bitrateKbps,
|
|
221
|
+
audioStartOffset: firstOffset,
|
|
222
|
+
durationSeconds,
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=mpeg-audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mpeg-audio.js","sourceRoot":"","sources":["../src/mpeg-audio.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { MediaError, looksSensitive } from "./errors.js";
|
|
2
|
+
function asRecord(value) {
|
|
3
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
4
|
+
? value
|
|
5
|
+
: undefined;
|
|
6
|
+
}
|
|
7
|
+
function safeErrorCode(value) {
|
|
8
|
+
return typeof value === "string" && /^[A-Za-z0-9_.-]{1,64}$/.test(value) ? value : undefined;
|
|
9
|
+
}
|
|
10
|
+
export function safeProviderRequestId(value) {
|
|
11
|
+
return typeof value === "string" && /^[A-Za-z0-9_-]{1,128}$/.test(value) && !looksSensitive(value)
|
|
12
|
+
? value
|
|
13
|
+
: undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Provider error codes that name a model/modality capability failure rather than a
|
|
17
|
+
* bad request. This list is fixed by mock tests only: a live probe must confirm the
|
|
18
|
+
* exact spellings before MEDIA_MODEL_UNSUPPORTED is claimed as verified. An unknown
|
|
19
|
+
* code never becomes "this model cannot do it".
|
|
20
|
+
*/
|
|
21
|
+
const MODEL_UNSUPPORTED_CODES = new Set([
|
|
22
|
+
"unsupportedmodel",
|
|
23
|
+
"modelnotsupported",
|
|
24
|
+
"unsupportedmodality",
|
|
25
|
+
"modalnotsupported",
|
|
26
|
+
"unsupportedmediatype",
|
|
27
|
+
"invalidmodality",
|
|
28
|
+
].map((code) => code.toLowerCase()));
|
|
29
|
+
function inspectionSide(value) {
|
|
30
|
+
if (typeof value !== "string")
|
|
31
|
+
return "unknown";
|
|
32
|
+
if (/^Input(?: [A-Za-z0-9_-]+)? data may contain inappropriate content\.?$/i.test(value)) {
|
|
33
|
+
return "input";
|
|
34
|
+
}
|
|
35
|
+
if (/^Output data may contain inappropriate content\.?$/i.test(value)) {
|
|
36
|
+
return "output";
|
|
37
|
+
}
|
|
38
|
+
return "unknown";
|
|
39
|
+
}
|
|
40
|
+
/** Map only bounded identifiers and a known verdict; never relay provider prose. */
|
|
41
|
+
export function mapProviderError(payload, options = {}) {
|
|
42
|
+
const root = asRecord(payload);
|
|
43
|
+
if (root === undefined || !("error" in root || "code" in root))
|
|
44
|
+
return undefined;
|
|
45
|
+
const error = asRecord(root.error) ?? root;
|
|
46
|
+
const errorCode = safeErrorCode(error.code);
|
|
47
|
+
const requestId = safeProviderRequestId(error.request_id) ??
|
|
48
|
+
safeProviderRequestId(root.request_id) ??
|
|
49
|
+
safeProviderRequestId(options.requestId);
|
|
50
|
+
const inspection = errorCode !== undefined && /^(?:data_inspection_failed|DataInspectionFailed)$/i.test(errorCode);
|
|
51
|
+
const modelUnsupported = errorCode !== undefined && MODEL_UNSUPPORTED_CODES.has(errorCode.toLowerCase());
|
|
52
|
+
const code = inspection
|
|
53
|
+
? "PROVIDER_CONTENT_REJECTED"
|
|
54
|
+
: modelUnsupported
|
|
55
|
+
? "MEDIA_MODEL_UNSUPPORTED"
|
|
56
|
+
: "MEDIA_ANALYSIS_FAILED";
|
|
57
|
+
return new MediaError({
|
|
58
|
+
code,
|
|
59
|
+
stage: "analyzing",
|
|
60
|
+
...(options.httpStatus === undefined ? {} : { httpStatus: options.httpStatus }),
|
|
61
|
+
...(requestId === undefined ? {} : { requestId }),
|
|
62
|
+
diagnostic: {
|
|
63
|
+
parse_reason: "provider_error",
|
|
64
|
+
...(errorCode === undefined ? {} : { error_code: errorCode }),
|
|
65
|
+
...(options.receivedEvents === undefined
|
|
66
|
+
? {}
|
|
67
|
+
: { received_sse_events: options.receivedEvents }),
|
|
68
|
+
...(inspection ? { inspection_side: inspectionSide(error.message) } : {}),
|
|
69
|
+
...(modelUnsupported ? { input_kind: "model_capability" } : {}),
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=provider-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-error.js","sourceRoot":"","sources":["../src/provider-error.ts"],"names":[],"mappings":"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"}
|
package/dist/sanitize.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-visible answer redaction. This is the only text rewriting the media gateway
|
|
3
|
+
* performs on a model answer: it removes internal upload locations, credential-shaped
|
|
4
|
+
* tokens and local absolute paths. It never changes what the model said about the media.
|
|
5
|
+
*
|
|
6
|
+
* Two layers, in this order:
|
|
7
|
+
*
|
|
8
|
+
* 1. `redactKnownPaths` — the exact path strings the Agent passed for this call, in both
|
|
9
|
+
* slash styles (and lowercase for Windows). A model echoing the prompt's path is the
|
|
10
|
+
* realistic leak, and this layer is exact: it does not depend on guessing which
|
|
11
|
+
* characters a file name may contain (spaces, kana, punctuation all work).
|
|
12
|
+
* 2. The generic rules below — a supplement for paths this call never saw. They cover
|
|
13
|
+
* Windows drive and UNC paths in both slash styles, forward-slash UNC, and POSIX
|
|
14
|
+
* paths with non-ASCII segments. A generic match cannot cross whitespace, so a path
|
|
15
|
+
* that was never supplied and contains a space may be only partially redacted.
|
|
16
|
+
* Public URLs, time codes and prose that merely uses a slash (`画面/声音`) stay intact.
|
|
17
|
+
*/
|
|
18
|
+
const PATH_SEGMENT = "[^\\s/<>\"',。;!?|?*]";
|
|
19
|
+
const KNOWN_POSIX_ROOTS = "home|tmp|Users|var|mnt|private|Volumes|media|srv|opt|etc|root|data";
|
|
20
|
+
/** Slash-style (and, for Windows paths, case) variants a model may echo. */
|
|
21
|
+
export function pathVariants(raw) {
|
|
22
|
+
const trimmed = raw.trim();
|
|
23
|
+
if (trimmed.length < 3) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const forward = trimmed.replaceAll("\\", "/");
|
|
27
|
+
const backward = trimmed.replaceAll("/", "\\");
|
|
28
|
+
const variants = new Set([trimmed, forward, backward]);
|
|
29
|
+
if (/^[A-Za-z]:/.test(trimmed) || trimmed.startsWith("\\\\") || forward.startsWith("//")) {
|
|
30
|
+
for (const variant of [...variants]) {
|
|
31
|
+
variants.add(variant.toLowerCase());
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return [...variants];
|
|
35
|
+
}
|
|
36
|
+
/** Public links are preserved, so the deterministic layer must not rewrite inside one. */
|
|
37
|
+
const PUBLIC_URL_SPAN = /\bhttps?:\/\/[^\s"'<>]+/gi;
|
|
38
|
+
const URL_PATH_SEPARATORS = new Set([",", "。", ";", "!", "?", "、", ",", ";", ".", "!", "?"]);
|
|
39
|
+
function replaceInGaps(segment, variants) {
|
|
40
|
+
let out = segment;
|
|
41
|
+
for (const variant of variants) {
|
|
42
|
+
if (out.includes(variant)) {
|
|
43
|
+
out = out.split(variant).join("[本地路径已隐藏]");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Exact, deterministic redaction of the media paths supplied for this call. Applied
|
|
50
|
+
* before the generic rules so characters a heuristic would have to enumerate (spaces,
|
|
51
|
+
* kana, punctuation) are covered.
|
|
52
|
+
*
|
|
53
|
+
* Public `http(s)` spans are left untouched: a local path can be a substring of an
|
|
54
|
+
* unrelated public link (local `/tmp/x.mp4` inside `https://cdn.example/tmp/x.mp4`).
|
|
55
|
+
* A sentence separator followed immediately by a known path ends the public link;
|
|
56
|
+
* the path then belongs to the replaceable gap, even when it contains spaces. An
|
|
57
|
+
* `oss://` link needs no special case here because the generic rules hide the whole
|
|
58
|
+
* token on the next pass.
|
|
59
|
+
*/
|
|
60
|
+
export function redactKnownPaths(text, knownPaths) {
|
|
61
|
+
const variants = knownPaths
|
|
62
|
+
.flatMap((raw) => pathVariants(raw))
|
|
63
|
+
.filter((variant) => variant.length >= 3);
|
|
64
|
+
if (variants.length === 0) {
|
|
65
|
+
return text;
|
|
66
|
+
}
|
|
67
|
+
let out = "";
|
|
68
|
+
let cursor = 0;
|
|
69
|
+
const urlMatcher = new RegExp(PUBLIC_URL_SPAN);
|
|
70
|
+
for (let match = urlMatcher.exec(text); match !== null; match = urlMatcher.exec(text)) {
|
|
71
|
+
const start = match.index;
|
|
72
|
+
let end = start + match[0].length;
|
|
73
|
+
for (let index = start; index < end; index += 1) {
|
|
74
|
+
if (URL_PATH_SEPARATORS.has(text[index] ?? "") &&
|
|
75
|
+
variants.some((variant) => text.startsWith(variant, index + 1))) {
|
|
76
|
+
end = index;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
out += replaceInGaps(text.slice(cursor, start), variants);
|
|
81
|
+
out += text.slice(start, end);
|
|
82
|
+
cursor = end;
|
|
83
|
+
urlMatcher.lastIndex = end;
|
|
84
|
+
}
|
|
85
|
+
return out + replaceInGaps(text.slice(cursor), variants);
|
|
86
|
+
}
|
|
87
|
+
export function sanitizeSensitiveText(text) {
|
|
88
|
+
return (text
|
|
89
|
+
.replace(/\boss:\/\/[^\s"'<>]+/gi, "[内部媒体地址已隐藏]")
|
|
90
|
+
.replace(/\b(?:sk-(?:ws-|proj-|live-|test-)?[A-Za-z0-9_-]{12,}|Bearer\s+[A-Za-z0-9._~-]{12,})\b/gi, "[凭证已隐藏]")
|
|
91
|
+
.replace(/(?<![A-Za-z0-9])(?:[A-Za-z]:[\\/]|\\\\)[^\r\n<>"',。;!?|?*]*?\.[A-Za-z0-9]{1,8}(?=$|[\s,。;!?<>"'])/gi, "[本地路径已隐藏]")
|
|
92
|
+
.replace(/(?<![A-Za-z0-9])(?:[A-Za-z]:[\\/]|\\\\)[^\s\r\n<>"',。;!?|?*]+/g, "[本地路径已隐藏]")
|
|
93
|
+
// Forward-slash UNC: two slashes, a host and at least one segment. A URL's `//`
|
|
94
|
+
// is preceded by `:` and is therefore excluded by the lookbehind.
|
|
95
|
+
.replace(new RegExp(`(?<![A-Za-z0-9:/._-])//${PATH_SEGMENT}+(?:/${PATH_SEGMENT}+)+`, "g"), "[本地路径已隐藏]")
|
|
96
|
+
// POSIX path under a standard root, whatever the leaf is called.
|
|
97
|
+
.replace(new RegExp(`(?<![A-Za-z0-9:/._-])/(?:${KNOWN_POSIX_ROOTS})(?:/${PATH_SEGMENT}+)+`, "g"), "[本地路径已隐藏]")
|
|
98
|
+
// Any other multi-segment POSIX path, recognised by its file extension.
|
|
99
|
+
.replace(new RegExp(`(?<![A-Za-z0-9:/._-])(?:/${PATH_SEGMENT}+)+/${PATH_SEGMENT}*\\.[A-Za-z0-9]{1,8}(?=$|[\\s,。;!?<>"'])`, "g"), "[本地路径已隐藏]")
|
|
100
|
+
// A root-level file, also recognised by its extension.
|
|
101
|
+
.replace(new RegExp(`(?<![A-Za-z0-9:/._-])/(?!/)${PATH_SEGMENT}+\\.[A-Za-z0-9]{1,8}(?=$|[\\s,。;!?<>"'])`, "g"), "[本地路径已隐藏]"));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}
|