Files
dify/knowledge-fs/scripts/export-openapi.mjs

67 lines
2.2 KiB
JavaScript

import { mkdir, writeFile } from "node:fs/promises";
import { dirname, resolve } from "node:path";
const DEFAULT_OUTPUT = "openapi/knowledge-fs.openapi.json";
function argumentValue(name) {
const index = process.argv.indexOf(name);
if (index === -1) return undefined;
const value = process.argv[index + 1];
if (!value || value.startsWith("--")) {
throw new Error(`${name} requires a value`);
}
return value;
}
process.env.NODE_ENV = "test";
const [
{ createNodePlatformAdapter },
{ createKnowledgeGateway },
{ createInMemoryCapabilityGrantProvenanceRepository },
] = await Promise.all([
import("../packages/adapters/src/node.ts"),
import("../packages/api/src/index.ts"),
import("../packages/api/src/capability-grant-provenance.ts"),
]);
const unavailableInContractExport = async () => {
throw new Error("OpenAPI export does not execute runtime services");
};
const outputPath = resolve(argumentValue("--output") ?? DEFAULT_OUTPUT);
const app = createKnowledgeGateway({
adapter: createNodePlatformAdapter({ env: {} }),
capabilityGrantProvenance: createInMemoryCapabilityGrantProvenanceRepository(),
difyCapabilityV2Auth: { authenticate: unavailableInContractExport },
difyIntegrationFreezes: {
freeze: unavailableInContractExport,
get: unavailableInContractExport,
},
difyIntegrationStates: {
activate: unavailableInContractExport,
get: unavailableInContractExport,
},
legacyAccessMutationsReadOnly: true,
legacyAuthorizationRemoved: true,
uploadSessions: {
abort: unavailableInContractExport,
cleanupExpired: unavailableInContractExport,
complete: unavailableInContractExport,
create: unavailableInContractExport,
get: unavailableInContractExport,
presignPart: unavailableInContractExport,
putSmallFile: unavailableInContractExport,
},
});
const response = await app.request("/openapi.json");
if (!response.ok) {
throw new Error(`OpenAPI export failed with HTTP ${response.status}`);
}
const document = await response.json();
const serialized = `${JSON.stringify(document, null, 2)}\n`;
await mkdir(dirname(outputPath), { recursive: true });
await writeFile(outputPath, serialized);
console.log(`Wrote OpenAPI artifact: ${outputPath}`);