Echo-AI-official's picture
Upload 280 files
0e759d2 verified
import * as fs from "fs/promises";
import * as path from "path";
import { logger as _logger } from "../../../lib/logger";
import { Logger } from "winston";
const saveMocksDirPath = path.join(__dirname, "../mocks/").replace("dist/", "");
const loadMocksDirPath = path.join(__dirname, "../../../__tests__/snips/mocks").replace("dist/", "");
export async function saveMock(options: unknown, result: unknown) {
if (process.env.FIRECRAWL_SAVE_MOCKS !== "true") return;
await fs.mkdir(saveMocksDirPath, { recursive: true });
const fileName = Date.now() + "-" + crypto.randomUUID() + ".json";
const filePath = path.join(saveMocksDirPath, fileName);
console.log(filePath);
await fs.writeFile(
filePath,
JSON.stringify(
{
time: Date.now(),
options,
result,
},
undefined,
4,
),
);
}
export type MockState = {
requests: {
time: number;
options: {
url: string;
method: string;
body?: any;
ignoreResponse: boolean;
ignoreFailure: boolean;
tryCount: number;
tryCooldown?: number;
};
result: any;
}[];
tracker: Record<string, number>;
};
export async function loadMock(
name: string,
logger: Logger = _logger,
): Promise<MockState | null> {
try {
const mockPath = path.join(loadMocksDirPath, name + ".json");
const relative = path.relative(loadMocksDirPath, mockPath);
if (!relative || relative.startsWith("..") || path.isAbsolute(relative)) {
// directory moving
return null;
}
const load = JSON.parse(await fs.readFile(mockPath, "utf8"));
return {
requests: load,
tracker: {},
};
} catch (error) {
logger.warn("Failed to load mock file!", {
name,
module: "scrapeURL:mock",
method: "loadMock",
error,
});
return null;
}
}