bugproof 0.1.2 → 0.2.5
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 +61 -5
- package/README.md +232 -8
- package/bin/bugproof.cmd +2 -0
- package/dist/capture/env-snapshot.d.ts +53 -0
- package/dist/capture/env-snapshot.d.ts.map +1 -0
- package/dist/capture/env-snapshot.js +122 -0
- package/dist/capture/env-snapshot.js.map +1 -0
- package/dist/capture/language-support.d.ts +55 -0
- package/dist/capture/language-support.d.ts.map +1 -0
- package/dist/capture/language-support.js +505 -0
- package/dist/capture/language-support.js.map +1 -0
- package/dist/capture/packager.d.ts +9 -0
- package/dist/capture/packager.d.ts.map +1 -1
- package/dist/capture/packager.js +23 -2
- package/dist/capture/packager.js.map +1 -1
- package/dist/capture/source-strategy.d.ts +52 -0
- package/dist/capture/source-strategy.d.ts.map +1 -0
- package/dist/capture/source-strategy.js +227 -0
- package/dist/capture/source-strategy.js.map +1 -0
- package/dist/cli.js +373 -12
- package/dist/cli.js.map +1 -1
- package/dist/config/loader.d.ts +44 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +87 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/replay/engine.d.ts +9 -0
- package/dist/replay/engine.d.ts.map +1 -1
- package/dist/replay/engine.js +29 -3
- package/dist/replay/engine.js.map +1 -1
- package/dist/replay/hints.d.ts +18 -0
- package/dist/replay/hints.d.ts.map +1 -0
- package/dist/replay/hints.js +138 -0
- package/dist/replay/hints.js.map +1 -0
- package/dist/replay/sandbox.js +41 -14
- package/dist/replay/sandbox.js.map +1 -1
- package/dist/replay/verdict.d.ts.map +1 -1
- package/dist/replay/verdict.js +41 -5
- package/dist/replay/verdict.js.map +1 -1
- package/dist/sandbox/bugbox.d.ts.map +1 -1
- package/dist/sandbox/bugbox.js +40 -6
- package/dist/sandbox/bugbox.js.map +1 -1
- package/dist/sandbox/container.d.ts +81 -0
- package/dist/sandbox/container.d.ts.map +1 -0
- package/dist/sandbox/container.js +343 -0
- package/dist/sandbox/container.js.map +1 -0
- package/dist/sandbox/cross-platform.d.ts +59 -0
- package/dist/sandbox/cross-platform.d.ts.map +1 -0
- package/dist/sandbox/cross-platform.js +330 -0
- package/dist/sandbox/cross-platform.js.map +1 -0
- package/dist/sandbox/filesystem.d.ts +2 -2
- package/dist/sandbox/filesystem.d.ts.map +1 -1
- package/dist/sandbox/filesystem.js +46 -19
- package/dist/sandbox/filesystem.js.map +1 -1
- package/dist/sandbox/network.d.ts.map +1 -1
- package/dist/sandbox/network.js +31 -2
- package/dist/sandbox/network.js.map +1 -1
- package/dist/share/gist.d.ts +21 -0
- package/dist/share/gist.d.ts.map +1 -0
- package/dist/share/gist.js +158 -0
- package/dist/share/gist.js.map +1 -0
- package/dist/utils/archive.d.ts +1 -0
- package/dist/utils/archive.d.ts.map +1 -1
- package/dist/utils/archive.js +42 -1
- package/dist/utils/archive.js.map +1 -1
- package/dist/utils/artifact-validation.d.ts +7 -0
- package/dist/utils/artifact-validation.d.ts.map +1 -0
- package/dist/utils/artifact-validation.js +212 -0
- package/dist/utils/artifact-validation.js.map +1 -0
- package/dist/utils/dependencies.d.ts +18 -0
- package/dist/utils/dependencies.d.ts.map +1 -0
- package/dist/utils/dependencies.js +218 -0
- package/dist/utils/dependencies.js.map +1 -0
- package/dist/utils/ui.d.ts +1 -0
- package/dist/utils/ui.d.ts.map +1 -1
- package/dist/utils/ui.js +1 -0
- package/dist/utils/ui.js.map +1 -1
- package/package.json +5 -2
- package/scripts/postinstall.cjs +38 -5
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BugBox Cross-Platform Layer
|
|
3
|
+
*
|
|
4
|
+
* Handles the scenario where a bug was captured on one OS but replayed on another.
|
|
5
|
+
* Instead of requiring Docker/WSL, this layer translates:
|
|
6
|
+
*
|
|
7
|
+
* 1. Commands — python3 ↔ python, node stays node, bash → cmd/powershell
|
|
8
|
+
* 2. Paths — / ↔ \, $HOME ↔ %USERPROFILE%, path separators in PATH
|
|
9
|
+
* 3. Environment variables — HOME ↔ USERPROFILE, USER ↔ USERNAME, etc.
|
|
10
|
+
* 4. Shell wrappers — bash -c "..." → cmd /c "..." or powershell -c "..."
|
|
11
|
+
*
|
|
12
|
+
* Limitations (honest about what we CAN'T do):
|
|
13
|
+
* - Compiled binaries (ELF on Windows, PE on Linux) → fail with clear message
|
|
14
|
+
* - OS-specific syscalls (inotify, kqueue, epoll) → fail with clear message
|
|
15
|
+
* - Shell scripts with heavy bash-isms → best-effort translation, may fail
|
|
16
|
+
*
|
|
17
|
+
* Philosophy: Translate what's translatable, warn clearly about what isn't.
|
|
18
|
+
*/
|
|
19
|
+
import * as os from 'os';
|
|
20
|
+
import * as path from 'path';
|
|
21
|
+
import { spawnSync } from 'child_process';
|
|
22
|
+
/**
|
|
23
|
+
* Detects whether cross-platform translation is needed and assesses compatibility.
|
|
24
|
+
*/
|
|
25
|
+
export function detectCrossPlatform(capturedPlatform, replayPlatform) {
|
|
26
|
+
const replay = replayPlatform || os.platform();
|
|
27
|
+
const needsTranslation = capturedPlatform !== replay;
|
|
28
|
+
const warnings = [];
|
|
29
|
+
let likelyCompatible = true;
|
|
30
|
+
if (needsTranslation) {
|
|
31
|
+
warnings.push(`Cross-platform replay: captured on ${platformName(capturedPlatform)}, replaying on ${platformName(replay)}`);
|
|
32
|
+
// Assess compatibility
|
|
33
|
+
if ((capturedPlatform === 'linux' && replay === 'darwin') ||
|
|
34
|
+
(capturedPlatform === 'darwin' && replay === 'linux')) {
|
|
35
|
+
// Unix-to-Unix: high compatibility for scripting languages
|
|
36
|
+
likelyCompatible = true;
|
|
37
|
+
warnings.push('Unix-to-Unix translation: high compatibility expected for scripting languages.');
|
|
38
|
+
}
|
|
39
|
+
else if ((capturedPlatform === 'win32' && (replay === 'linux' || replay === 'darwin')) ||
|
|
40
|
+
((capturedPlatform === 'linux' || capturedPlatform === 'darwin') && replay === 'win32')) {
|
|
41
|
+
// Cross-family: medium compatibility
|
|
42
|
+
likelyCompatible = true; // Optimistic — we'll catch hard failures in command translation
|
|
43
|
+
warnings.push('Cross-family translation applied. Path separators and commands will be adapted.');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { capturedPlatform, replayPlatform: replay, needsTranslation, likelyCompatible, warnings };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Translates a command from the captured platform to the replay platform.
|
|
50
|
+
*/
|
|
51
|
+
export function translateCommand(command, capturedPlatform, replayPlatform) {
|
|
52
|
+
const replay = replayPlatform || os.platform();
|
|
53
|
+
const translations = [];
|
|
54
|
+
const blockers = [];
|
|
55
|
+
if (capturedPlatform === replay) {
|
|
56
|
+
return { command, translated: false, translations: [], blockers: [] };
|
|
57
|
+
}
|
|
58
|
+
let translated = [...command];
|
|
59
|
+
// 1. Translate the executable
|
|
60
|
+
translated[0] = translateExecutable(translated[0], capturedPlatform, replay, translations, blockers);
|
|
61
|
+
// 2. Translate shell wrappers
|
|
62
|
+
translated = translateShellWrapper(translated, capturedPlatform, replay, translations);
|
|
63
|
+
// 3. Translate path arguments
|
|
64
|
+
translated = translated.map((arg, i) => {
|
|
65
|
+
if (i === 0)
|
|
66
|
+
return arg; // Already handled
|
|
67
|
+
return translatePathArg(arg, capturedPlatform, replay);
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
command: translated,
|
|
71
|
+
translated: translations.length > 0,
|
|
72
|
+
translations,
|
|
73
|
+
blockers,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Translates environment variables between platforms.
|
|
78
|
+
*/
|
|
79
|
+
export function translateEnvironment(env, capturedPlatform, replayPlatform) {
|
|
80
|
+
const replay = replayPlatform || os.platform();
|
|
81
|
+
const translations = [];
|
|
82
|
+
if (capturedPlatform === replay) {
|
|
83
|
+
return { environment: env, translations: [] };
|
|
84
|
+
}
|
|
85
|
+
const result = { ...env };
|
|
86
|
+
// Translate PATH separator
|
|
87
|
+
if (result.PATH) {
|
|
88
|
+
const fromSep = capturedPlatform === 'win32' ? ';' : ':';
|
|
89
|
+
const toSep = replay === 'win32' ? ';' : ':';
|
|
90
|
+
if (fromSep !== toSep) {
|
|
91
|
+
result.PATH = result.PATH.split(fromSep).join(toSep);
|
|
92
|
+
translations.push(`PATH separator: '${fromSep}' → '${toSep}'`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Map HOME ↔ USERPROFILE
|
|
96
|
+
if (capturedPlatform === 'win32' && replay !== 'win32') {
|
|
97
|
+
// Windows → Unix
|
|
98
|
+
if (result.USERPROFILE && !result.HOME) {
|
|
99
|
+
result.HOME = translatePathValue(result.USERPROFILE, capturedPlatform, replay);
|
|
100
|
+
translations.push('USERPROFILE → HOME');
|
|
101
|
+
}
|
|
102
|
+
if (result.USERNAME && !result.USER) {
|
|
103
|
+
result.USER = result.USERNAME;
|
|
104
|
+
translations.push('USERNAME → USER');
|
|
105
|
+
}
|
|
106
|
+
if (result.APPDATA && !result.XDG_CONFIG_HOME) {
|
|
107
|
+
result.XDG_CONFIG_HOME = translatePathValue(result.APPDATA, capturedPlatform, replay);
|
|
108
|
+
translations.push('APPDATA → XDG_CONFIG_HOME');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (capturedPlatform !== 'win32' && replay === 'win32') {
|
|
112
|
+
// Unix → Windows
|
|
113
|
+
if (result.HOME && !result.USERPROFILE) {
|
|
114
|
+
result.USERPROFILE = translatePathValue(result.HOME, capturedPlatform, replay);
|
|
115
|
+
translations.push('HOME → USERPROFILE');
|
|
116
|
+
}
|
|
117
|
+
if (result.USER && !result.USERNAME) {
|
|
118
|
+
result.USERNAME = result.USER;
|
|
119
|
+
translations.push('USER → USERNAME');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Translate TMPDIR/TMP/TEMP
|
|
123
|
+
if (capturedPlatform !== 'win32' && replay === 'win32') {
|
|
124
|
+
if (result.TMPDIR && !result.TEMP) {
|
|
125
|
+
result.TEMP = os.tmpdir();
|
|
126
|
+
result.TMP = os.tmpdir();
|
|
127
|
+
translations.push('TMPDIR → TEMP/TMP (using local temp dir)');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (capturedPlatform === 'win32' && replay !== 'win32') {
|
|
131
|
+
if ((result.TEMP || result.TMP) && !result.TMPDIR) {
|
|
132
|
+
result.TMPDIR = os.tmpdir();
|
|
133
|
+
translations.push('TEMP/TMP → TMPDIR (using local temp dir)');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Translate path values in all env vars
|
|
137
|
+
for (const key of Object.keys(result)) {
|
|
138
|
+
if (result[key] && looksLikePath(result[key], capturedPlatform)) {
|
|
139
|
+
const translated = translatePathValue(result[key], capturedPlatform, replay);
|
|
140
|
+
if (translated !== result[key]) {
|
|
141
|
+
result[key] = translated;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return { environment: result, translations };
|
|
146
|
+
}
|
|
147
|
+
// ── Command translation helpers ──
|
|
148
|
+
/** Common command aliases across platforms */
|
|
149
|
+
const COMMAND_MAP = {
|
|
150
|
+
// ── Scripting languages ──
|
|
151
|
+
'python3': { win32: 'python' },
|
|
152
|
+
'python': { linux: 'python3', darwin: 'python3' },
|
|
153
|
+
'pip3': { win32: 'pip' },
|
|
154
|
+
'pip': { linux: 'pip3', darwin: 'pip3' },
|
|
155
|
+
// ── Java/JVM ──
|
|
156
|
+
'gradlew': { win32: 'gradlew.bat' },
|
|
157
|
+
'gradlew.bat': { linux: './gradlew', darwin: './gradlew' },
|
|
158
|
+
'./gradlew': { win32: 'gradlew.bat' },
|
|
159
|
+
'mvnw': { win32: 'mvnw.cmd' },
|
|
160
|
+
'mvnw.cmd': { linux: './mvnw', darwin: './mvnw' },
|
|
161
|
+
'./mvnw': { win32: 'mvnw.cmd' },
|
|
162
|
+
// ── C/C++ build tools ──
|
|
163
|
+
'make': { win32: 'mingw32-make' },
|
|
164
|
+
'mingw32-make': { linux: 'make', darwin: 'make' },
|
|
165
|
+
'cc': { win32: 'gcc' },
|
|
166
|
+
'c++': { win32: 'g++' },
|
|
167
|
+
// ── .NET ──
|
|
168
|
+
'dotnet': { win32: 'dotnet', linux: 'dotnet', darwin: 'dotnet' },
|
|
169
|
+
// ── Utilities ──
|
|
170
|
+
'open': { win32: 'start', linux: 'xdg-open' },
|
|
171
|
+
'xdg-open': { win32: 'start', darwin: 'open' },
|
|
172
|
+
'start': { linux: 'xdg-open', darwin: 'open' },
|
|
173
|
+
'cls': { linux: 'clear', darwin: 'clear' },
|
|
174
|
+
'clear': { win32: 'cls' },
|
|
175
|
+
'cat': { win32: 'type' },
|
|
176
|
+
'ls': { win32: 'dir' },
|
|
177
|
+
'rm': { win32: 'del' },
|
|
178
|
+
'cp': { win32: 'copy' },
|
|
179
|
+
'mv': { win32: 'move' },
|
|
180
|
+
'which': { win32: 'where' },
|
|
181
|
+
'where': { linux: 'which', darwin: 'which' },
|
|
182
|
+
// ── Shell ──
|
|
183
|
+
'sh': { win32: 'bash' },
|
|
184
|
+
};
|
|
185
|
+
/** Binary extensions that cannot run cross-platform (reserved for future use) */
|
|
186
|
+
const _NATIVE_BINARY_EXTENSIONS = ['.exe', '.dll', '.so', '.dylib', '.elf', ''];
|
|
187
|
+
function translateExecutable(exe, from, to, translations, blockers) {
|
|
188
|
+
const baseName = path.basename(exe).replace(/\.exe$/i, '');
|
|
189
|
+
// Check for native binaries
|
|
190
|
+
const ext = path.extname(exe).toLowerCase();
|
|
191
|
+
if (from !== to) {
|
|
192
|
+
if (from === 'win32' && ext === '.exe' && to !== 'win32') {
|
|
193
|
+
blockers.push(`Cannot run Windows executable '${exe}' on ${platformName(to)}. Requires Windows or Wine.`);
|
|
194
|
+
}
|
|
195
|
+
if (from === 'linux' && !ext && to === 'win32') {
|
|
196
|
+
// Could be a Linux ELF binary — check if it's a known scripting command
|
|
197
|
+
if (!isScriptingCommand(baseName)) {
|
|
198
|
+
blockers.push(`Binary '${exe}' may be a Linux ELF executable. Cannot run on Windows without WSL.`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Try command map
|
|
203
|
+
const mapping = COMMAND_MAP[baseName];
|
|
204
|
+
if (mapping && mapping[to]) {
|
|
205
|
+
// Verify the target command exists
|
|
206
|
+
const exists = commandExists(mapping[to]);
|
|
207
|
+
if (exists) {
|
|
208
|
+
translations.push(`Command: ${baseName} → ${mapping[to]}`);
|
|
209
|
+
return mapping[to];
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// python3 → python fallback on Windows
|
|
213
|
+
if (baseName === 'python3' && to === 'win32') {
|
|
214
|
+
if (commandExists('python')) {
|
|
215
|
+
translations.push('Command: python3 → python');
|
|
216
|
+
return 'python';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return exe;
|
|
220
|
+
}
|
|
221
|
+
function translateShellWrapper(command, from, to, translations) {
|
|
222
|
+
if (command.length < 2)
|
|
223
|
+
return command;
|
|
224
|
+
const exe = path.basename(command[0]).replace(/\.exe$/i, '');
|
|
225
|
+
// bash -c "..." → cmd /c "..." or powershell -c "..."
|
|
226
|
+
if ((exe === 'bash' || exe === 'sh') && command[1] === '-c' && to === 'win32') {
|
|
227
|
+
if (commandExists('bash')) {
|
|
228
|
+
// WSL/Git Bash available — keep as-is
|
|
229
|
+
return command;
|
|
230
|
+
}
|
|
231
|
+
translations.push(`Shell: ${exe} -c → powershell -Command`);
|
|
232
|
+
return ['powershell', '-NoProfile', '-Command', ...command.slice(2)];
|
|
233
|
+
}
|
|
234
|
+
// cmd /c "..." → bash -c "..." on Unix
|
|
235
|
+
if (exe === 'cmd' && (command[1] === '/c' || command[1] === '/C') && to !== 'win32') {
|
|
236
|
+
translations.push('Shell: cmd /c → bash -c');
|
|
237
|
+
return ['bash', '-c', ...command.slice(2)];
|
|
238
|
+
}
|
|
239
|
+
// powershell -Command "..." → bash -c "..." on Unix
|
|
240
|
+
if ((exe === 'powershell' || exe === 'pwsh') && to !== 'win32') {
|
|
241
|
+
const cmdIdx = command.findIndex(a => a === '-Command' || a === '-c');
|
|
242
|
+
if (cmdIdx >= 0) {
|
|
243
|
+
translations.push(`Shell: ${exe} → bash -c`);
|
|
244
|
+
return ['bash', '-c', ...command.slice(cmdIdx + 1)];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return command;
|
|
248
|
+
}
|
|
249
|
+
// ── Path translation ──
|
|
250
|
+
function translatePathArg(arg, from, to) {
|
|
251
|
+
if (!looksLikePath(arg, from))
|
|
252
|
+
return arg;
|
|
253
|
+
return translatePathValue(arg, from, to);
|
|
254
|
+
}
|
|
255
|
+
function translatePathValue(value, from, to) {
|
|
256
|
+
if (from === 'win32' && to !== 'win32') {
|
|
257
|
+
// Windows → Unix: C:\Users\foo → /home/foo (best effort)
|
|
258
|
+
let result = value.replace(/\\/g, '/');
|
|
259
|
+
// Strip drive letter
|
|
260
|
+
result = result.replace(/^[A-Za-z]:/, '');
|
|
261
|
+
// Map common Windows paths
|
|
262
|
+
result = result.replace(/^\/Users\//, '/home/');
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
if (from !== 'win32' && to === 'win32') {
|
|
266
|
+
// Unix → Windows: /home/foo/project → C:\Users\foo\project (best effort)
|
|
267
|
+
let result = value.replace(/\//g, '\\');
|
|
268
|
+
// Add drive letter if absolute
|
|
269
|
+
if (result.startsWith('\\')) {
|
|
270
|
+
result = 'C:' + result;
|
|
271
|
+
}
|
|
272
|
+
// Map common Unix paths
|
|
273
|
+
result = result.replace(/^C:\\home\\/, 'C:\\Users\\');
|
|
274
|
+
return result;
|
|
275
|
+
}
|
|
276
|
+
return value;
|
|
277
|
+
}
|
|
278
|
+
function looksLikePath(value, platform) {
|
|
279
|
+
if (platform === 'win32') {
|
|
280
|
+
return /^[A-Za-z]:[/\\]/.test(value) || value.includes('\\');
|
|
281
|
+
}
|
|
282
|
+
return value.startsWith('/') || value.startsWith('./') || value.startsWith('../');
|
|
283
|
+
}
|
|
284
|
+
// ── Utilities ──
|
|
285
|
+
function platformName(p) {
|
|
286
|
+
switch (p) {
|
|
287
|
+
case 'win32': return 'Windows';
|
|
288
|
+
case 'linux': return 'Linux';
|
|
289
|
+
case 'darwin': return 'macOS';
|
|
290
|
+
default: return p;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function isScriptingCommand(name) {
|
|
294
|
+
const crossPlatformCommands = [
|
|
295
|
+
// Scripting runtimes
|
|
296
|
+
'node', 'python', 'python3', 'ruby', 'perl', 'php', 'deno', 'bun',
|
|
297
|
+
// JVM
|
|
298
|
+
'java', 'javac', 'kotlin', 'kotlinc', 'scala', 'scalac',
|
|
299
|
+
// Compiled but cross-platform source
|
|
300
|
+
'go', 'cargo', 'rustc', 'gcc', 'g++', 'clang', 'clang++', 'cc', 'c++',
|
|
301
|
+
// Build tools
|
|
302
|
+
'make', 'cmake', 'ninja', 'meson', 'gradle', 'gradlew', 'mvn', 'mvnw', 'sbt', 'ant',
|
|
303
|
+
'msbuild', 'dotnet', 'xcodebuild',
|
|
304
|
+
// Package managers
|
|
305
|
+
'npm', 'npx', 'yarn', 'pnpm', 'pip', 'pip3', 'gem', 'bundle', 'composer',
|
|
306
|
+
'apt', 'brew', 'choco', 'scoop', 'pacman',
|
|
307
|
+
// Version managers
|
|
308
|
+
'nvm', 'pyenv', 'rbenv', 'rustup', 'sdkman',
|
|
309
|
+
// Test runners
|
|
310
|
+
'jest', 'pytest', 'mocha', 'vitest', 'rspec', 'junit',
|
|
311
|
+
// Misc tools
|
|
312
|
+
'git', 'curl', 'wget', 'tar', 'unzip', 'grep', 'find', 'sed', 'awk',
|
|
313
|
+
];
|
|
314
|
+
return crossPlatformCommands.includes(name);
|
|
315
|
+
}
|
|
316
|
+
function commandExists(name) {
|
|
317
|
+
try {
|
|
318
|
+
const cmd = os.platform() === 'win32' ? 'where' : 'which';
|
|
319
|
+
const result = spawnSync(cmd, [name], {
|
|
320
|
+
encoding: 'utf-8',
|
|
321
|
+
timeout: 3000,
|
|
322
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
323
|
+
});
|
|
324
|
+
return result.status === 0;
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=cross-platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-platform.js","sourceRoot":"","sources":["../../src/sandbox/cross-platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ export declare function createIsolatedDir(): IsolatedDirResult;
|
|
|
33
33
|
* so the replayed process cannot modify captured files.
|
|
34
34
|
*
|
|
35
35
|
* Linux/macOS: removes write bit (chmod a-w recursively).
|
|
36
|
-
* Windows:
|
|
36
|
+
* Windows: attrib +r recursively (more reliable than icacls).
|
|
37
37
|
*/
|
|
38
38
|
export declare function lockDirReadOnly(dirPath: string): void;
|
|
39
39
|
/**
|
|
@@ -44,7 +44,7 @@ export declare function unlockDir(dirPath: string): void;
|
|
|
44
44
|
/**
|
|
45
45
|
* Removes the entire isolated directory.
|
|
46
46
|
* Handles read-only files by unlocking first.
|
|
47
|
-
* Never throws — best-effort cleanup.
|
|
47
|
+
* Never throws — best-effort cleanup with retries on Windows.
|
|
48
48
|
*/
|
|
49
49
|
export declare function cleanupIsolatedDir(result: IsolatedDirResult): void;
|
|
50
50
|
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/sandbox/filesystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAgBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/sandbox/filesystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAgBrD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAkBrD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAkB/C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CA+BlE"}
|
|
@@ -39,18 +39,23 @@ export function createIsolatedDir() {
|
|
|
39
39
|
* so the replayed process cannot modify captured files.
|
|
40
40
|
*
|
|
41
41
|
* Linux/macOS: removes write bit (chmod a-w recursively).
|
|
42
|
-
* Windows:
|
|
42
|
+
* Windows: attrib +r recursively (more reliable than icacls).
|
|
43
43
|
*/
|
|
44
44
|
export function lockDirReadOnly(dirPath) {
|
|
45
45
|
if (!fs.existsSync(dirPath))
|
|
46
46
|
return;
|
|
47
47
|
if (os.platform() === 'win32') {
|
|
48
|
-
// On Windows, use
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
// On Windows, use attrib +r to set read-only recursively (simpler and more reliable)
|
|
49
|
+
try {
|
|
50
|
+
spawnSync('attrib', ['+r', dirPath, '/s', '/d'], {
|
|
51
|
+
encoding: 'utf-8',
|
|
52
|
+
timeout: 10000,
|
|
53
|
+
stdio: 'pipe',
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Best effort — attrib may fail on some Windows setups
|
|
58
|
+
}
|
|
54
59
|
}
|
|
55
60
|
else {
|
|
56
61
|
// Unix: remove write bit recursively
|
|
@@ -65,12 +70,17 @@ export function unlockDir(dirPath) {
|
|
|
65
70
|
if (!fs.existsSync(dirPath))
|
|
66
71
|
return;
|
|
67
72
|
if (os.platform() === 'win32') {
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
// On Windows, use attrib -r to clear read-only recursively
|
|
74
|
+
try {
|
|
75
|
+
spawnSync('attrib', ['-r', dirPath, '/s', '/d'], {
|
|
76
|
+
encoding: 'utf-8',
|
|
77
|
+
timeout: 10000,
|
|
78
|
+
stdio: 'pipe',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Best effort — attrib may fail on some Windows setups
|
|
83
|
+
}
|
|
74
84
|
}
|
|
75
85
|
else {
|
|
76
86
|
// Unix: restore write bit
|
|
@@ -80,7 +90,7 @@ export function unlockDir(dirPath) {
|
|
|
80
90
|
/**
|
|
81
91
|
* Removes the entire isolated directory.
|
|
82
92
|
* Handles read-only files by unlocking first.
|
|
83
|
-
* Never throws — best-effort cleanup.
|
|
93
|
+
* Never throws — best-effort cleanup with retries on Windows.
|
|
84
94
|
*/
|
|
85
95
|
export function cleanupIsolatedDir(result) {
|
|
86
96
|
if (!fs.existsSync(result.rootDir))
|
|
@@ -92,11 +102,28 @@ export function cleanupIsolatedDir(result) {
|
|
|
92
102
|
catch {
|
|
93
103
|
// Best effort
|
|
94
104
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
105
|
+
// On Windows, retry cleanup a few times to handle file locks and handle delays
|
|
106
|
+
const maxRetries = os.platform() === 'win32' ? 3 : 1;
|
|
107
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
108
|
+
try {
|
|
109
|
+
fs.rmSync(result.rootDir, { recursive: true, force: true });
|
|
110
|
+
return; // Success
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
if (attempt === maxRetries - 1) {
|
|
114
|
+
// Last attempt failed, but don't throw — best effort
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
// Wait a bit before retrying on Windows to allow file handles to release
|
|
118
|
+
if (os.platform() === 'win32') {
|
|
119
|
+
try {
|
|
120
|
+
spawnSync('timeout', ['/t', '1', '/nobreak'], { stdio: 'pipe' });
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Fallback: continue to next retry anyway
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
100
127
|
}
|
|
101
128
|
}
|
|
102
129
|
// ── Internal helpers ──
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/sandbox/filesystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAa1C;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAElE,4CAA4C;IAC5C,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAErC,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE3C,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO;IAEpC,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC9B,
|
|
1
|
+
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/sandbox/filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,YAAY,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,eAAe,CAWjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,sBAAsB,CA4CxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,IAAI,CAiBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,YAAY,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,eAAe,CAWjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EAAE,GAChB,sBAAsB,CA4CxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,IAAI,CAiBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAuB/E"}
|
package/dist/sandbox/network.js
CHANGED
|
@@ -119,13 +119,18 @@ export function createNetworkCleanup(strategy, ruleName) {
|
|
|
119
119
|
* @returns true if the rule was added, false on failure.
|
|
120
120
|
*/
|
|
121
121
|
export function addFirewallBlockRule(ruleName, exePath) {
|
|
122
|
+
const safeRuleName = sanitizeFirewallRuleName(ruleName);
|
|
123
|
+
const safeExePath = sanitizeExecutablePath(exePath);
|
|
124
|
+
if (!safeRuleName || !safeExePath) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
122
127
|
try {
|
|
123
128
|
const result = spawnSync('netsh', [
|
|
124
129
|
'advfirewall', 'firewall', 'add', 'rule',
|
|
125
|
-
`name=${
|
|
130
|
+
`name=${safeRuleName}`,
|
|
126
131
|
'dir=out',
|
|
127
132
|
'action=block',
|
|
128
|
-
`program=${
|
|
133
|
+
`program=${safeExePath}`,
|
|
129
134
|
], { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
130
135
|
return result.status === 0;
|
|
131
136
|
}
|
|
@@ -133,4 +138,28 @@ export function addFirewallBlockRule(ruleName, exePath) {
|
|
|
133
138
|
return false;
|
|
134
139
|
}
|
|
135
140
|
}
|
|
141
|
+
function sanitizeFirewallRuleName(value) {
|
|
142
|
+
if (!value || value.length > 120) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
if (/[\r\n\t=]/.test(value)) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
if (!/^[A-Za-z0-9 _.-]+$/.test(value)) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
return value;
|
|
152
|
+
}
|
|
153
|
+
function sanitizeExecutablePath(value) {
|
|
154
|
+
if (!value || value.length > 260) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
if (/[\r\n\0]/.test(value)) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
if (/["<>|]/.test(value)) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
136
165
|
//# sourceMappingURL=network.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAe1C;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA0B;IAC9D,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9C,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAyB,EACzB,OAAiB;IAEjB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO;gBACL,oEAAoE;gBACpE,mEAAmE;gBACnE,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;gBAClE,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;QAEJ,KAAK,cAAc;YACjB,OAAO;gBACL,4CAA4C;gBAC5C,mEAAmE;gBACnE,gCAAgC;gBAChC,OAAO,EAAE;oBACP,cAAc;oBACd,IAAI;oBACJ,2CAA2C;oBAC3C,IAAI;oBACJ,GAAG,OAAO;iBACX;gBACD,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;QAEJ,KAAK,OAAO;YACV,sEAAsE;YACtE,0EAA0E;YAC1E,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,IAAI;gBAClB,QAAQ;aACT,CAAC;QAEJ,KAAK,MAAM,CAAC;QACZ;YACE,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,KAAK;gBACnB,QAAQ;aACT,CAAC;IACN,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAyB,EACzB,QAAiB;IAEjB,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,EAAE,CAAC;QACrC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC;gBACH,SAAS,CACP,OAAO,EACP,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,QAAQ,EAAE,CAAC,EACjE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CACpD,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;YAC5D,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,OAAe;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CACtB,OAAO,EACP;YACE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;YACxC,QAAQ,
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/sandbox/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Share Engine — push .bug artifacts to GitHub Gist
|
|
3
|
+
*
|
|
4
|
+
* Creates a secret gist with the artifact contents for easy sharing.
|
|
5
|
+
* Recipients can download and replay with: bugproof pull <gist-url>
|
|
6
|
+
*/
|
|
7
|
+
export interface ShareResult {
|
|
8
|
+
url: string;
|
|
9
|
+
gistId: string;
|
|
10
|
+
rawUrl: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function sanitizeShareError(input: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Uploads artifact contents to a GitHub Gist.
|
|
15
|
+
* Requires GITHUB_TOKEN or BUGPROOF_GITHUB_TOKEN env var.
|
|
16
|
+
*/
|
|
17
|
+
export declare function shareToGist(artifactPath: string, options?: {
|
|
18
|
+
public?: boolean;
|
|
19
|
+
description?: string;
|
|
20
|
+
}): Promise<ShareResult>;
|
|
21
|
+
//# sourceMappingURL=gist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gist.d.ts","sourceRoot":"","sources":["../../src/share/gist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,WAAW,CAAC,CA4EtB"}
|